C++11 ではchar16_t
、char32_t
UTF-16 および UTF-32 でエンコードされたテキスト文字列の操作が容易になります。ただし、ライブラリはマルチバイト I/O 用<iostream>
に定義された実装のみをサポートしています。wchar_t
サポートを補完するためにライブラリにサポートが追加されていないchar16_t
のはなぜですか?char32_t
<iostream>
wchar_t
標準ライブラリの最小限の Unicode サポート (リビジョン 2)の提案では、文字列と codecvt ファセットで新しい文字型をサポートするためのライブラリ ワーキング グループ間でのみサポートがあったことが示されています。どうやら大多数は、iostream、fstream、codecvt 以外のファセット、および正規表現のサポートに反対していたようです。
2006 年のポートランド会議の議事録によると、「LWG は Unicode の完全なサポートに取り組んでいますが、既存のライブラリ機能の Unicode 文字バリアントでライブラリを複製するつもりはありません。」詳細はわかりませんが、委員会は現在のライブラリ インターフェイスが Unicode には不適切であると感じていると推測されます。考えられる不満の 1 つは、固定サイズの文字を念頭に置いて設計されていることですが、Unicode データは固定サイズのコード ポイントを使用できますが、文字を単一のコード ポイントに制限しないため、Unicode はそれを完全に廃止します。
個人的には、さまざまなプラットフォームで既に提供されている最小限のサポートを標準化しない理由はないと思います (Windows は wchar_t に UTF-16 を使用し、ほとんどの Unix プラットフォームは UTF-32 を使用します)。より高度な Unicode サポートには新しいライブラリ機能が必要になりますが、iostream とファセットで char16_t と char32_t をサポートしても邪魔にはなりませんが、基本的な Unicode I/O が有効になります。