It looks like the answer is that char16_t
support is only partly implemented in GCC 4.8. The library headers don't install facets needed to convert numbers. Here is what the Boost.Locale project says about it:
GNU GCC 4.5/C++0x Status
GNU C++ compiler provides decent support of C++0x characters however:
Standard library does not install any std::locale::facets for this support so any attempt to format numbers using char16_t or char32_t streams would just fail. Standard library misses specialization for required char16_t/char32_t locale facets, so "std" backends is not build-able as essential symbols missing, also codecvt facet can't be created as well.
Visual Studio 2010 (MSVC10)/C++0x Status
MSVC provides all required facets however:
Standard library does not provide installations of std::locale::id for these facets in DLL so it is not usable with /MD, /MDd compiler flags and requires static link of the runtime library. char16_t and char32_t are not distinct types but rather aliases of unsigned short and unsigned types which contradicts to C++0x requirements making it impossible to write char16_t/char32_t to stream and causing multiple faults.