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!

Respuestas a la pregunta(1)

Su respuesta a la pregunta