diff --git a/src/json.hpp b/src/json.hpp
index 1b1939c4..cf69dff6 100644
--- a/src/json.hpp
+++ b/src/json.hpp
@@ -5544,7 +5544,10 @@ class basic_json
                 // 15 digits of precision allows round-trip IEEE 754 string->double->string; 
                 // to be safe, we read this value from std::numeric_limits<number_float_t>::digits10
                 if (std::fmod(m_value.number_float, 1) == 0) o << std::fixed << std::setprecision(1);
-                else o << std::defaultfloat << std::setprecision(std::numeric_limits<double>::digits10);
+                else {
+                    o.unsetf(std::ios_base::floatfield);  // std::defaultfloat not supported in gcc version < 5
+                    o << std::setprecision(std::numeric_limits<double>::digits10);
+                }
                 o << m_value.number_float;
                 return;
             }
diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c
index 873f9be8..c6046d15 100644
--- a/src/json.hpp.re2c
+++ b/src/json.hpp.re2c
@@ -5544,7 +5544,10 @@ class basic_json
                 // 15 digits of precision allows round-trip IEEE 754 string->double->string; 
                 // to be safe, we read this value from std::numeric_limits<number_float_t>::digits10
                 if (std::fmod(m_value.number_float, 1) == 0) o << std::fixed << std::setprecision(1);
-                else o << std::defaultfloat << std::setprecision(std::numeric_limits<double>::digits10);
+                else {
+                    o.unsetf(std::ios_base::floatfield);  // std::defaultfloat not supported in gcc version < 5
+                    o << std::setprecision(std::numeric_limits<double>::digits10);
+                }
                 o << m_value.number_float;
                 return;
             }