Il seguente codice funziona bene su Linux, ma genera un'eccezione su OS X 10.7:Impostazione locali su OS X si blocca
#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;
}
L'uscita su OS X è:
locale::facet::_S_create_c_locale
nome non valida
Tuttavia, lo standard dice esplicitamente che
Il set di valori di argomenti stringa validi è
"C"
,""
e qualsiasi valore definito dall'implementazione.
Quindi qualsiasi cosa causi il comportamento sopra violare lo standard.
Il compilatore utilizzato è clang ++ 3.1 (tag/Apple/clang-318.0.58); Ho anche provato con GCC 4.7, installato tramite Homebrew, con lo stesso risultato.
Possono altre persone convalidare questo problema? Cosa lo causa? Sto facendo qualcosa di sbagliato? Si tratta di un bug in OS X?
(Forse questo relates to another xlocale
problem ma gli errori sono in realtà completamente diversa.)
Penso che questo sia (quasi) un duplicato di [questa domanda] (http://stackoverflow.com/questions/1745045/stdlocale-breakage-on-macos-10-6-with-lang-en-us- utf-8) ... –
@EitanT Buona scoperta, è (un * esatto * duplicato)! Grazie. –
Non penso che tu stia usando xlocale. Credo che tu sia un problema con libstdC++, che usa una diversa libreria di supporto locale (che apparentemente non è supportata su OS X, come la domanda EitanT collega agli stati). Penso che se passi a libC++ il tuo programma funzionerà. Sebbene come dettagli della mia domanda, ci sono problemi con alcune impostazioni locali in libC++, a causa di bug in xlocale. – bames53