llvm.orgまたはAppleのclang3.0からリリースされた最新バージョンのclangv2.9は、Unicode文字列リテラルをサポートしていません。トランクソースの上から構築された最新の利用可能なバージョンは、Unicode文字列リテラルをサポートします。
clangの次のllvm.orgリリース(つまり、3.0)は、Unicode文字列リテラル構文をサポートしますが、ASCII以外のソースファイルエンコーディングはサポートしません。そのため、そのllvm.orgリリースを使用しても、これらの文字を文字通りソースに入力して、UTF-16でエンコードされた文字列値に変換することはできません。代わりに、\uエスケープを使用する必要があります。繰り返しになりますが、top of trunkはUTF-8ソースコードをサポートしていますが、現在テスト中のllvm.org3.0リリースに間に合いませんでした。その後の次のリリース(6か月程度)では、UTF-8ソースコードのサポートが向上するはずです(他のソースエンコーディングはサポートされません)。
編集:Xcode4.3バージョンのclangにはこれらの機能があります。
編集:そして今、LLVM.orgからの3.1リリースにはそれらがあります
そのため、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
}
この標準では、iostreamsライブラリのchar16_tとchar32_tのサポートは実際にはあまり必要ないため、これを最大限に活用するには、おそらく別の文字列型に変換する必要があります。少なくとも、これらとより便利なstd :: stringの間で変換する機能が必要です(ただし、セットアップには必ずしも便利ではありません...)。