El siguiente código funciona bien en Linux, pero genera una excepción en OS X 10.7:lugares poniente en OS X se bloquea
#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;
}
La salida en OS X es:
locale::facet::_S_create_c_locale
nombre no válido
Sin embargo, la norma dice explícitamente que
El conjunto de valores de argumento de cadena válidos es
"C"
,""
y cualquier valor definido por la implementación.
Por lo tanto, cualquier causa del comportamiento anterior está violando el estándar.
El compilador utilizado es clang ++ 3.1 (tags/Apple/clang-318.0.58); También lo probé con GCC 4.7, instalado a través de Homebrew, con el mismo resultado.
¿Pueden otras personas validar este problema? ¿Qué lo causa? ¿Estoy haciendo algo mal? ¿Es esto un error en OS X?
(Tal vez esto relates to another xlocale
problem pero los errores son en realidad completamente diferente.)
Creo que esto es (casi) un duplicado de [esta pregunta] (http://stackoverflow.com/questions/1745045/stdlocale-breakage-on-macos-10-6-with-lang-en-us- utf-8) ... –
@EitanT ¡Buen descubrimiento, es (un * exacto * duplicado)! Gracias. –
No creo que estés usando xlocale. Creo que su problema es con libstdC++, que usa una biblioteca de soporte de locale diferente (que aparentemente no es compatible con OS X, como la pregunta que EitanT vincula a los estados). Creo que si cambias a libC++, tu programa funcionará. Aunque como mi pregunta detalla, hay problemas con algunas configuraciones regionales en libC++, debido a errores en xlocale. – bames53