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

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
We can still short-circuit when we set failbit, but continue parsing otherwise:

--- a/libstdc++-v3/include/bits/chrono_io.h
+++ b/libstdc++-v3/include/bits/chrono_io.h
@@ -4737,8 +4737,10 @@ namespace __detail
                      if (__val == -1 || __val > 23) [[unlikely]]
                        {
                          if ((_M_need & _ChronoParts::_TimeOfDay) != 0)
-                           __err |= ios_base::failbit;
-                         break;
+                           {
+                             __err |= ios_base::failbit;
+                             break;
+                           }
                        }
                      if (!__read_chr(':')) [[unlikely]]
                        break;
@@ -4748,8 +4750,10 @@ namespace __detail
                      if (__val == -1 || __val > 60) [[unlikely]]
                        {
                          if ((_M_need & _ChronoParts::_TimeOfDay) != 0)
-                           __err |= ios_base::failbit;
-                         break;
+                           {
+                             __err |= ios_base::failbit;
+                             break;
+                           }
                        }
                      __min = minutes(__val);

Reply via email to