От C++ 0x работающий проект, новые символьные типы (char16_t и char32_t) для обработки Unicode будет не подписан (uint_least16_t, и uint_least32_t будет базовыми типами).
Но насколько я вижу (не очень далеко, возможно), тип char8_t (на основе uint_least8_t) не определяется. Почему?
И это еще более сбивает с толку, когда Вы видите, что новый префикс кодирования u8 представлен для строкового литерала UTF-8... на основе старого друга (знак / неподписанный) символ. Почему?
Обновление: существует предложение добавить новый тип: char8_t
char8_t: тип для символов UTF-8 и строк (Пересмотр 1) http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0482r1.html
char будет типом, используемым для UTF-8, потому что он переопределен, чтобы быть уверенным, что его можно использовать с ним:
В целях улучшения поддержки для Unicode в компиляторах C ++, определение типа char было изменено, чтобы иметь как минимум размер , необходимый для хранения восьмибитной кодировки UTF-8, так и достаточно большой содержать любой член базового набора символов выполнения компилятора . Ранее был определен только как последний. C ++ 0x будет поддерживать три кодировки Unicode: UTF-8, UTF-16 и {{1} } UTF-32. В дополнение к ранее отмеченным изменениям в определении char, C ++ 0x добавит два новых типа символов : char16_t и char32_t. Эти предназначены для хранения UTF-16 и UTF-32 соответственно.
Источник: http://en.wikipedia.org/wiki/C%2B%2B0x
Большинство приложений UTF-8 в любом случае уже используют символы char на ПК / Mac.
char16_t
и char32_t
предполагается использовать для представления кодовых точек. Поскольку нет отрицательных кодовых точек, разумно, чтобы они были беззнаковыми.
UTF-8 не представляет кодовые точки напрямую, поэтому не имеет значения, подписан ли базовый тип u8
или нет.