reset locale (for #272)

This commit is contained in:
Niels 2016-06-28 19:18:23 +02:00
parent 420659f187
commit 7214243d89
3 changed files with 15 additions and 3 deletions

View File

@ -5658,10 +5658,13 @@ class basic_json
// reset width to 0 for subsequent calls to this stream // reset width to 0 for subsequent calls to this stream
o.width(0); o.width(0);
// fix locale problems // fix locale problems
o.imbue(std::locale(std::locale(), new DecimalSeparator)); auto old_locale = o.imbue(std::locale(std::locale(), new DecimalSeparator));
// do the actual serialization // do the actual serialization
j.dump(o, pretty_print, static_cast<unsigned int>(indentation)); j.dump(o, pretty_print, static_cast<unsigned int>(indentation));
// reset locale
o.imbue(old_locale);
return o; return o;
} }

View File

@ -5658,10 +5658,13 @@ class basic_json
// reset width to 0 for subsequent calls to this stream // reset width to 0 for subsequent calls to this stream
o.width(0); o.width(0);
// fix locale problems // fix locale problems
o.imbue(std::locale(std::locale(), new DecimalSeparator)); auto old_locale = o.imbue(std::locale(std::locale(), new DecimalSeparator));
// do the actual serialization // do the actual serialization
j.dump(o, pretty_print, static_cast<unsigned int>(indentation)); j.dump(o, pretty_print, static_cast<unsigned int>(indentation));
// reset locale
o.imbue(old_locale);
return o; return o;
} }

View File

@ -14079,9 +14079,15 @@ TEST_CASE("regression tests")
CHECK(j1a.dump() == "23.42"); CHECK(j1a.dump() == "23.42");
CHECK(j1b.dump() == "23.42"); CHECK(j1b.dump() == "23.42");
// check if locale is properly reset
std::stringstream ss; std::stringstream ss;
ss.imbue(std::locale(std::locale(), new CommaDecimalSeparator));
ss << 47.11;
CHECK(ss.str() == "47,11");
ss << j1a; ss << j1a;
CHECK(ss.str() == "23.42"); CHECK(ss.str() == "47,1123.42");
ss << 47.11;
CHECK(ss.str() == "47,1123.4247,11");
CHECK(j2a.dump() == "23.42"); CHECK(j2a.dump() == "23.42");
//issue #230 //issue #230