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);