stod não funciona corretamente com boost :: locale

Estou tentando usar boost :: locale e std :: stod juntos em um local alemão em que uma vírgula é o separador decimal. Considere 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 ("") cria o local correto e a saída é

d1: 1,1
d2: 2,2

como eu espero. Quando eu comento a linha (1) e a linha de comentário (2), a saída é

d1: 1
d2: 2.2

O resultado para d2 é esperado. Tanto quanto eu entendo, o boost :: locale quer que eu especifique explicitamente que o d2 deve ser formatado como um número e

std::cout << "d2: " << boost::locale::as::number << d2 << std::endl;

fixa a saída para 2,2 novamente. O problema é que std :: stod não considera mais 1,1 como um número de ponto flutuante válido e o trunca para 1.

Minha pergunta é: por que o std :: stod para de funcionar quando eu gero meu código do idioma com boost :: locale?

Informações adicionais: Estou usando o VC ++ 2015, Boost 1.60, sem UTI, Windows 10

Atualizar:

Notei que o problema é corrigido quando eu defino o código do idioma global duas vezes, primeiro com std :: locale ("") e depois com o boost:

std::locale::global(std::locale(""));
bl::generator gen;
std::locale::global(gen(""));

Eu não tenho idéia do por que se comporta dessa maneira!

questionAnswers(1)

yourAnswerToTheQuestion