次のコードは Linux では問題なく動作しますが、OS X 10.7 では例外がスローされます。
#include <iostream>
#include <locale>
#include <stdexcept>
int main() try {
std::locale::global(std::locale(""));
std::cout << "Using locale: " << std::locale().name() << "\n";
}
catch (std::runtime_error const& e) {
std::cout << e.what() << "\n";
return 1;
}
OS X での出力は次のとおりです。
locale::facet::_S_create_c_locale
名前が無効です
ただし、標準は明示的に次のように述べています
有効な文字列引数値のセットは、、、
"C"
および""
実装定義の値です。
したがって、上記の動作の原因は何であれ、標準に違反しています。
使用するコンパイラは clang++ 3.1 (tags/Apple/clang-318.0.58) です。Homebrew経由でインストールされたGCC 4.7でも試してみましたが、同じ結果が得られました。
他の人がこの問題を検証できますか? 何が原因ですか?私は何か間違ったことをしていますか?これは OS X のバグですか?
(これは別のxlocale
問題に関連している可能性がありますが、実際にはエラーはまったく異なります。)