先日、FreeBSD 10.0-RELEASEが登場しました(参考: SourceForge.JP Magazine)。今回、大きな変更点としてClangとlibc++の標準採用があります。これにより、以下のプログラムが動作するようになりました。
// c++ helloworld.cppまたはclang++ helloworld.cpp #include <iostream> int main() { std::wcout.imbue(std::locale("")); std::wcout << L"こんにちは、世界" << std::endl; } |
ただし、これが動くのはLANG=ja_JP.UTF-8の場合のみでした。ja_JP.eucJPでは、コンパイル時に“error: illegal character encoding in string literal”と言われ、それを回避しても実行時にセグメンテーションフォルトになります。
今まで使われてきたlibstdc++は、std::localeが”C”しか使えませんでした。libstdc++でロケールが完全に使えるのはglibc使用時のみ、すなわち実質的にGNU/Linuxくらいのものでした。
これに対し、libc++はxlocale(jman、xxx_l
系関数)などを使用しています。このため、UTF-8でしか動かないということは原理上なく、今後直す余地があります。
以上、FreeBSD 10.0からは標準でstd::localeが使えるようになるという話でした。
スポンサード リンク |