stod no funciona correctamente con boost :: locale
Estoy tratando de usar boost :: locale y std :: stod juntos en una configuración regional alemana donde una coma es el separador decimal. Considera este código:
boost::locale::generator gen;
std::locale loc(""); // (1)
//std::locale loc = gen(""); // (2)
std::locale::global(loc);
std::cout.imbue(loc);
std::string s = "1,1"; //float string in german locale!
double d1 = std::stod(s);
std::cout << "d1: " << d1 << std::endl;
double d2 = 2.2;
std::cout << "d2: " << d2 << std::endl;
std :: locale loc ("") crea la configuración regional correcta y la salida es
d1: 1,1
d2: 2,2
como espero Cuando comento la línea (1) y la línea de comentario (2), la salida es
d1: 1
d2: 2.2
El resultado para d2 es de esperar. Hasta donde entiendo boost :: locale quiere que especifique explícitamente que d2 debe formatearse como un número y hacer
std::cout << "d2: " << boost::locale::as::number << d2 << std::endl;
fija la salida a 2,2 nuevamente. El problema es que std :: stod ya no considera 1,1 como un número de coma flotante válido y lo trunca a 1.
Mi pregunta es: ¿por qué std :: stod deja de funcionar cuando genero mi localidad con boost :: locale?
Información adicional: Estoy usando VC ++ 2015, Boost 1.60, sin ICU, Windows 10
Actualizar:
Noté que el problema se soluciona cuando configuro la configuración regional global dos veces, primero con std :: locale ("") y luego con boost:
std::locale::global(std::locale(""));
bl::generator gen;
std::locale::global(gen(""));
¡Sin embargo, no tengo idea de por qué se comporta de esta manera!