__h = __bad_h;
}
else if (__c == 'H' && __val >= 0 && __val <= 23)
- __h = hours(__val);
+ {
+ __h = hours(__val);
+ __h12 = __bad_h;
+ }
+ else
+ {
+ if (_M_need & _ChronoParts::_TimeOfDay)
+ __err |= ios_base::failbit;
+ break;
+ }
}
__parts |= _ChronoParts::_TimeOfDay;
break;
__min = minutes(__val);
else
{
- __h = __bad_h;
- __min = __bad_min;
- __s = __bad_sec;
+ if (_M_need & _ChronoParts::_TimeOfDay)
+ __err |= ios_base::failbit;
break;
}
}
else
{
auto __val = __read_unsigned(2);
- if (__val == -1 || __val > 23)
- {
- __h = __bad_h;
- __min = __bad_min;
- __s = __bad_sec;
- break;
- }
- if (!__read_chr(':'))
+ if (__val == -1 || __val > 23) [[unlikely]]
{
- __err |= ios_base::failbit;
+ if (_M_need & _ChronoParts::_TimeOfDay)
+ __err |= ios_base::failbit;
break;
}
+ if (!__read_chr(':')) [[unlikely]]
+ break;
__h = hours(__val);
__val = __read_unsigned(2);
- if (__val == -1 || __val > 60)
+ if (__val == -1 || __val > 60) [[unlikely]]
{
- __h = __bad_h;
- __min = __bad_min;
- __s = __bad_sec;
+ if (_M_need & _ChronoParts::_TimeOfDay)
+ __err |= ios_base::failbit;
break;
}
__min = minutes(__val);
- __parts |= _ChronoParts::_TimeOfDay;
-
- if (__c != 'T' || !__read_chr(':'))
+ if (__c == 'R')
+ {
+ __parts |= _ChronoParts::_TimeOfDay;
+ break;
+ }
+ else if (!__read_chr(':')) [[unlikely]]
break;
}
[[fallthrough]];
ratio<1>>)
{
auto __val = __read_unsigned(__num ? __num : 2);
- if (0 <= __val && __val <= 59)
+ if (0 <= __val && __val <= 59) [[likely]]
__s = seconds(__val);
else
{
- __h = __bad_h;
- __min = __bad_min;
- __s = __bad_sec;
+ if (_M_need & _ChronoParts::_TimeOfDay)
+ __err |= ios_base::failbit;
break;
}
}
VERIFY( is.eof() && ! is.fail() );
VERIFY( y == 2010y );
+ min = -1min;
+ is.clear();
+ is.str("25:59");
+ is >> parse("%H:%M", min); // 25h is out of range and needed
+ VERIFY( is.fail() );
+ VERIFY( min == -1min );
+
is.clear();
is.str("328 00");
is >> parse("%3C %y", y); // 328 is out of range for %C (PR libstdc++/111162)