Use one TU-wide locale instead of three
diff --git a/lib/cpp/src/thrift/TToString.h b/lib/cpp/src/thrift/TToString.h
index 474429d..d91c58c 100644
--- a/lib/cpp/src/thrift/TToString.h
+++ b/lib/cpp/src/thrift/TToString.h
@@ -32,11 +32,15 @@
namespace apache {
namespace thrift {
+// unnamed namespace to enforce internal linkage - could be done with 'inline' when once have C++17
+namespace {
+const auto default_locale = std::locale("C");
+}
+
template <typename T>
std::string to_string(const T& t) {
std::ostringstream o;
- const static auto locale = std::locale("C");
- o.imbue(locale);
+ o.imbue(default_locale);
o << t;
return o.str();
}
@@ -45,8 +49,7 @@
// is enabled.
inline std::string to_string(const float& t) {
std::ostringstream o;
- const static auto locale = std::locale("C");
- o.imbue(locale);
+ o.imbue(default_locale);
o.precision(static_cast<std::streamsize>(std::ceil(static_cast<double>(std::numeric_limits<float>::digits * std::log10(2.0f) + 1))));
o << t;
return o.str();
@@ -54,8 +57,7 @@
inline std::string to_string(const double& t) {
std::ostringstream o;
- const static auto locale = std::locale("C");
- o.imbue(locale);
+ o.imbue(default_locale);
o.precision(static_cast<std::streamsize>(std::ceil(static_cast<double>(std::numeric_limits<double>::digits * std::log10(2.0f) + 1))));
o << t;
return o.str();
@@ -63,8 +65,7 @@
inline std::string to_string(const long double& t) {
std::ostringstream o;
- const static auto locale = std::locale("C");
- o.imbue(locale);
+ o.imbue(default_locale);
o.precision(static_cast<std::streamsize>(std::ceil(static_cast<double>(std::numeric_limits<long double>::digits * std::log10(2.0f) + 1))));
o << t;
return o.str();