Yes, failure conditions have to be reported, but I disagree
that __FILE__ is part of a failure message, because the user
should not be expected to read the sources to understand a
message (also, a source code identifier, such as a unique version
number, is additionally needed in this case).
Why not include __FUNCTION__, __func__ or __PRETTY_FUNCTION__, if
avialable? I think usually very helpful (if avialable) but also
not portable (to C89), AFAIK.
You cannot have const members with runtime data.
As I understand it, the "small old" compilers may locate
const data into ROM (or other RO memory), which makes it
impossible to initialize it with runtime data, so again the
problem may not be the compiler language / version, but
properties of the equipment. If you want your code to be runable
on such systems, you cannot use it.