Поддержка C++11<char16_t>и<char32_t>является экспериментальной, в основном не работает и не предназначена для использования в производстве с текущими последними компиляторами: GCC-4.5, MSVC10, пока не будут исправлены недостатки основного компилятора.
GNU GCC 4.5/C++11 Status
Компилятор GNU C++ обеспечивает достойную поддержку символов C++11:
- Стандартная библиотека не устанавливает никаких std::locale::facets для этой поддержки, поэтому любая попытка форматировать числа с использованием потоков
char16_tилиchar32_tпросто провалится.
- Стандартная библиотека пропускает специализацию для требуемых
char16_t/char32_tлокальных граней, поэтому «std» бэкэнды не могут быть построены, поскольку отсутствуют важные символы, такжеcodecvtгрань также не может быть создана.
Visual Studio 2010 (MSVC10)/C++11 Status
MSVC обеспечивает все необходимые аспекты:
- Стандартная библиотека не предоставляет установки std::locale::id для этих граней в DLL, поэтому она не может использоваться с
/MD,/MDdфлагами компилятора и требует статической ссылки библиотеки времени выполнения.
char16_tиchar32_tявляются не отдельными типами, а скорее псевдонимами неподписанных коротких и неподписанных типов, что противоречит требованиям C++11, что делает невозможным записьchar16_t/char32_tдля потоковой передачи и вызывает множественные ошибки.
Если вы хотите построить или протестировать Boost. Локальная поддержка C++11 char16_t и char32_t должна передаваться<cxxflags="-DBOOST_LOCALE_ENABLE_CHAR32_T -DBOOST_LOCALE_ENABLE_CHAR16_T"><b2>во время сборки и определения<BOOST_LOCALE_ENABLE_CHAR32_T>и<BOOST_LOCALE_ENABLE_CHAR32_T>при использовании Boost. местность