在OS X上设置区域设置崩溃

Kon*_*lph 8 c++ macos locale xlocale

以下代码在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;
}
Run Code Online (Sandbox Code Playgroud)

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问题有关,但错误实际上是完全不同的.)

bam*_*s53 2

我认为您没有使用 xlocale。我相信您的问题出在 libstdc++ 上,它使用 OS X 上不支持的不同语言环境支持库,正如问题 EitanT 链接到的那样。

如果你切换到 libc++ 你的程序就可以工作。