8

次のコードは 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問題に関連している可能性がありますが、実際にはエラーはまったく異なります。)

4

2 に答える 2

2

xlocale を使用しているとは思いません。あなたの問題は、OS Xでサポートされていない別のロケールサポートライブラリを使用するlibstdc ++にあると思います.EitanTのリンクが述べているように。

libc++ に切り替えると、プログラムが動作します。

于 2012-06-25T15:13:18.497 に答える