下面的代码在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的一个bug吗?
(也许这与另一个xlocale
问题相关,但错误实际上完全不同。)