The standard C++ compilers all support the following macros:
__DATE__ - a string literal containing the date when the source file was compiled, in the form of "Mmm dd yyyy".
__FILE__ - a string literal containing the name of the source file.
__LINE__ - an integer representing the current source line number.
__STDC__ - defined if the C compiler conforms to the ANSI standard. This macro is undefined if the language level is set to anything other than ANSI.
__TIME__ - a string literal containing the time when the source file was compiled, in the form of "hh:mm:ss".
__cplusplus - defined when the compiler supports c plus plus.
These macros can be used anywhere in the source code, just as if they were defined by the #define directive. Their value changes according the the specific file and line in the source code. Therefore, we can use them to implement error reporting that includes file and line numbers in C++ source code.
#define REPORT(x) cerr << endl << "In " << __FILE__ << ", line " << __LINE__ << ": " << endl << x << endl; cerr.flush();