1) char16_t
и char32_t
будут различными новыми типами, поэтому возможна их перегрузка.
Цитата из ISO / IEC JTC1 SC22 WG21 N2018 :
Определите char16_t
как typedef для
отличный новый тип, с именем
_Char16_t
имеет тот же размер и представление, что и uint_least16_t
.
Аналогично, определите char32_t
как
typedef для нового определенного типа, с
имя _Char32_t
, которое имеет тот же
размер и представление как
uint_least32_t
.
Дальнейшее объяснение (из статьи на devx.com " Готовьтесь к революции Юникода "):
Вы, наверное, задаетесь вопросом, почему
_Char16_t
и _Char32_t
типы и ключевые слова необходимы в первую очередь
когда typedefs uint_least16_t
и
uint_least32_t
уже доступны.
Основная проблема в том, что новые типы
решить перегрузку. Это снег
возможно перегрузить функции, которые
возьмите _Char16_t
и _Char32_t
аргументы и создавать специализации
такие как std::basic_string<_Char16_t>
которые отличаются от
std::basic_string <wchar_t>
.
2) u16string
и u32string
действительно являются частью C ++ 0x, а не только GCC'-системами, как они упоминаются в различных стандартных проектах документов . Они будут включены в новый заголовок <string>
. Цитата из той же статьи:
Стандартная библиотека также предоставит
_Char16_t
и _Char32_t
typedefs, по аналогии с typedefs wstring
,
wcout
и т. Д. Для следующих стандартных классов:
filebuf, streambuf, streampos, streamoff, ios, istream, ostream, fstream,
ifstream, ofstream, stringstream, istringstream, ostringstream,
string