This proposal should answer some of your questions. In brief, yes, they’re interpreted by the compiler as freestanding expression macros. However, built-in macros like file, line, column, etc. get special treatment by the compiler so as to be expanded at the call site instead of the declaration site (as is customary for expression macros). The proposal I linked to aims to extend this capability to user-declared macros that are outside of the standard library.