Stod не работает правильно с boost :: locale

Я пытаюсь использовать boost :: locale и std :: stod вместе в немецкой локали, где запятая является десятичным разделителем. Рассмотрим этот код:

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 ("") создает правильную локаль и вывод

d1: 1,1
d2: 2,2

как я ожидаю. Когда я закомментирую строку (1) и раскомментируем строку (2), вывод

d1: 1
d2: 2.2

Результат для d2 следует ожидать. Насколько я понимаю, boost :: locale хочет, чтобы я явно указал, что d2 должен быть отформатирован как число

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

снова фиксирует вывод на 2,2 Проблема в том, что std :: stod больше не считает 1,1 действительным числом с плавающей запятой и усекает его до 1.

Мой вопрос: почему перестает работать std :: stod, когда я генерирую свою локаль с помощью boost :: locale?

Дополнительная информация: я использую VC ++ 2015, Boost 1.60, нет ICU, Windows 10

Обновить:

Я заметил, что проблема исправлена, когда я дважды устанавливал глобальную локаль, сначала с помощью std :: locale (""), а затем с boost:

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

Я понятия не имею, почему это ведет себя так, хотя!

Ответы на вопрос(1)

Ваш ответ на вопрос