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(""));
Я понятия не имею, почему это ведет себя так, хотя!