Libstdc++ has been using __STRICT_ANSI__ for years, e.g. to decide whether or not std::is_integral<__int128> should be true. gcc/ChangeLog: * doc/cpp.texi (Common Predefined Macros): Mention that __STRICT_ANSI__ is used by libstdc++ too. OK for trunk? I'd also like to tell users they're not allowed to undefine the macro, would that be acceptable, or is that supposed to work? I don't see how it's possible to make it work with libstdc++ if users do stupid things like: #include #undef __STRICT_ANSI__ #include This causes the library to be in an inconsistent (broken) state, because some templates are defined according to strict ISO C++ rules and then other templates are not, but assume the earlier definitions are consistent. We frequently see users doing -std=c++11 -U__STRICT_ANSI__ which makes me smash my head on the table. Just use -std=gnu++11 and stop being dumb.