LINUX.ORG.RU

История изменений

Исправление proud_anon, (текущая версия) :

Я не совсем понял, при чём здесь UCS-2 и для чего ты скопипастил кусок из ICU.

wchar_t, как и char, может быть как со знаком, так и без. char16_t и char32_t введены в C11/C++11. Они должны быть без знака и не меньше 16 и 32 бит соответственно (по-моему, они должны быть одинакового размера и выравнивания с uint16_least_t и uint32_least_t, но не уверен). Если у GCC-5.3.0+MUSL-1.1.12 unsigned short = 16 бит, а unsigned int = 32 бита, то ничто не мешает разработчиком определить char16_t и char32_t как аналогичные им, что они и сделали.

Но, конечно, так как ICU разрабатывался задолго до C++11, там свой тип данных для code points, выбираемый в зависимости от платформы, да.

По-хорошему, надо писать свою либу или использовать готовую. Одними только типами ничего не добиться.

Это правда, но ТСу же очень надо. Тем более, что в C++ многие шаблонные типы нормально работают с char16_t и char32_t.

Исходная версия proud_anon, :

Я не совсем понял, при чём здесь UCS-2 и для чего ты скопипастил кусок из ICU.

wchar_t, как и char, может быть как со знаком, так и без. char16_t и char32_t введены в C11/C++11. Они должны быть без знака и не меньше 16 и 32 бит соответственно (по-моему, они должны быть одинакового размера и выравнивания uint16_least_t и uint32_least_t, но не уверен). Если у GCC-5.3.0+MUSL-1.1.12 unsigned short = 16 бит, а unsigned int = 32 бита, то ничто не мешает разработчиком определить char16_t и char32_t как аналогичные им, что они и сделали.

Но, конечно, так как ICU разрабатывался задолго до C++11, там свой тип данных для code points, выбираемый в зависимости от платформы, да.

По-хорошему, надо писать свою либу или использовать готовую. Одними только типами ничего не добиться.

Это правда, но ТСу же очень надо. Тем более, что в C++ многие шаблонные типы нормально работают с char16_t и char32_t.