Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting locales on OS X crashes

The following code works fine on Linux but throws an exception on 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;
}

The output on OS X is:

locale::facet::_S_create_c_locale name not valid

However, the standard explicitly says that

The set of valid string argument values is "C", "", and any implementation-defined values.

So whatever causes the behaviour above is violating the standard.

The compiler used is clang++ 3.1 (tags/Apple/clang-318.0.58); I’ve also tried it with GCC 4.7, installed via Homebrew, with the same result.

Can other people validate this problem? What causes it? Am I doing anything wrong? Is this a bug in OS X?

(Maybe this relates to another xlocale problem but the errors are actually completely different.)

like image 295
Konrad Rudolph Avatar asked Jun 25 '12 13:06

Konrad Rudolph


1 Answers

I don't think you're using xlocale. I believe that your problem is with libstdc++, which uses a different locale support library that is not supported on OS X, as the question EitanT links to states.

If you switch to libc++ your program will work.

like image 109
bames53 Avatar answered Oct 09 '22 17:10

bames53