http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56086
--- Comment #4 from joseph at codesourcery dot com <joseph at codesourcery dot com> 2013-01-28 03:43:31 UTC --- For C, char16_t and char32_t are typedefs in <uchar.h> (a header provided by the C library, not by GCC), *not* built-in types, and __STDC_UTF_16__ is a built-in macro. For C++, char16_t and char32_t are built-in types that don't need a header to use them, and __STDC_UTF_16__ is defined in <cuchar> rather than built-in (I don't know if any change may have resulted from Jason raising the issue of the difference from C regarding that macro as per <http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01524.html>).