stod funktioniert mit boost :: locale @ nicht richt

Ich versuche, boost :: locale und std :: stod zusammen in einem deutschen Gebietsschema zu verwenden, in dem ein Komma das Dezimaltrennzeichen ist. Betrachten Sie diesen Code:

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 ("") erstellt das richtige Gebietsschema und die Ausgabe ist

d1: 1,1
d2: 2,2

as ich erwarte. Wenn ich Zeile (1) und Kommentarzeile (2) auskommentiere, ist die Ausgabe

d1: 1
d2: 2.2

Das Ergebnis für d2 ist zu erwarten. Soweit ich das verstehe, möchte boost :: locale, dass ich explizit spezifiziere, dass d2 als Zahl formatiert werden soll und

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

fixiert die Ausgabe wieder auf 2,2. Das Problem ist, dass std :: stod 1.1 nicht mehr als gültige Gleitkommazahl betrachtet und auf 1 abschneidet.

Meine Frage lautet: Warum funktioniert std :: stod nicht mehr, wenn ich mein Gebietsschema mit boost :: locale generiere?

Zusätzliche Informationen: Ich verwende VC ++ 2015, Boost 1.60, keine Intensivstation, Windows 10

Aktualisieren

Ich habe festgestellt, dass das Problem behoben ist, wenn ich das globale Gebietsschema zweimal festgelegt habe, zuerst mit std :: locale ("") und dann mit boost:

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

Ich habe keine Ahnung, warum es sich so verhält!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage