Das Festlegen von Gebietsschemata unter OS X stürzt ab

Das Festlegen von Gebietsschemata unter OS X stürzt ab


Der folgende Code funktioniert gut unter Linux, löst aber unter OS X 10.7 eine Ausnahme aus:


#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;
}

Die Ausgabe unter OS X ist:



Der Standard sagt dies jedoch ausdrücklich



Was auch immer das obige Verhalten verursacht, verstößt gegen den Standard.


Der verwendete Compiler ist clang++ 3.1 (tags/Apple/clang-318.0.58); Ich habe es auch mit GCC 4.7 versucht, installiert über Homebrew, mit dem gleichen Ergebnis.


Können andere Personen dieses Problem validieren? Was verursacht es? Mache ich etwas falsch? Ist das ein Bug in OS X?


(Vielleicht bezieht sich dies auf einen anderen xlocale Problem, aber die Fehler sind eigentlich ganz andere.)


Antworten:


Ich glaube nicht, dass Sie xlocale verwenden. Ich glaube, dass Ihr Problem mit libstdc++ zusammenhängt, das eine andere Gebietsschema-Unterstützungsbibliothek verwendet, die von OS X nicht unterstützt wird, wie die Frage, auf die EitanT verweist, besagt.


Wenn Sie zu libc++ wechseln, wird Ihr Programm funktionieren.


Einige Code-Antworten


#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;
}