https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120548

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |redi at gcc dot gnu.org
             Status|NEW                         |ASSIGNED

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
This is the fix:

--- a/libstdc++-v3/include/std/format
+++ b/libstdc++-v3/include/std/format
@@ -2398,9 +2398,16 @@ namespace __format
        const size_t __r = __str.size() - __e; // Length of remainder.
        auto __overwrite = [&](_CharT* __p, size_t) {
          // Apply grouping to the digits before the radix or exponent.
-         auto __end = std::__add_grouping(__p, __np.thousands_sep(),
+         int __off = 0;
+         if (__str.front() == '-' || __str.front() == '+')
+           {
+             *__p = __str.front();
+             __off = 1;
+           }
+         auto __end = std::__add_grouping(__p + __off, __np.thousands_sep(),
                                           __grp.data(), __grp.size(),
-                                          __str.data(), __str.data() + __e);
+                                          __str.data() + __off,
+                                          __str.data() + __e);
          if (__r) // If there's a fractional part or exponent
            {
              if (__d != __str.npos)

Reply via email to