Последние выпущенные версии clang, v2.9 с llvm.org или Apple clang 3.0, не поддерживают строковые литералы Unicode.Последняя доступная версия, построенная из верхней части магистрального источника, поддерживает строковые литералы Юникода.
В следующем выпуске clang (то есть 3.0) llvm.org будет поддерживать строковый литерал Юникода,но не поддерживает никакой кодировки исходного файла, кроме ASCII.Поэтому даже с этим выпуском llvm.org вы не сможете вводить эти символы буквально в исходном коде и конвертировать их в строковое значение в кодировке UTF-16.Вместо этого вам придется использовать \ u Escape.Опять же, top of trunk поддерживает исходный код UTF-8, но он не был вовремя введен в выпуск llvm.org 3.0, который в настоящее время тестируется.В следующем выпуске после этого (через 6 месяцев или около того) должна быть улучшена поддержка исходного кода UTF-8 (но не других исходных кодировок).
Редактировать: версия Clang для Xcode 4.3 действительно имеет этиFeatures.
Редактировать: И теперь выпуск 3.1 от LLVM.org содержит их
Так что clang теперь полностью поддерживает следующее:
#include <string>
int main() {
std::u16string a = u"鵝"; // UTF-8 source is transformed into UTF-16 literal
std::u32string b = U"滿"; // UTF-8 source is transformed into UTF-32 literal
}
Оказывается, стандарт на самом деле не требует большой поддержки char16_t и char32_t в библиотеке iostreams, поэтому вам, вероятно, придется преобразовать его в другой тип строки, чтобы извлечь из этого много пользы.По крайней мере, требуется возможность преобразования между ними и более полезным std :: string (хотя это не совсем удобно для настройки ...).