Section: 29.13 [time.parse] Status: New Submitter: Jonathan Wakely Opened: 2023-07-28 Last modified: 2023-11-03 18:04:50 UTC
Priority: 3
View other active issues in [time.parse].
View all other issues in [time.parse].
View all issues with New status.
Discussion:
A call to chrono::parse can encounter redundant or contradictory data, e.g.
or even simpler:stringstream("2023 2022") >> chrono::parse("%Y %C%y", yr);
These cases can both be successfully parsed, as the input stream contains the expected values in the expected format. But what value will yr have after it returns?stringstream("2023 2022") >> chrono::parse("%Y %Y", yr);
[2023-11-02; Reflector poll]
Set priority to 3 after reflector poll.
"Should allow setting failbit
if an implementation does detect
inconsistent values."
"Yes, that's what MSVC does, so the wording needs something like:
it is unspecified whether setstate(ios_base::failbit)
is called on the basic_istream
or whether an unspecified value
is assigned to the p argument."
Proposed resolution:
This wording is relative to N4950.
Modify 29.13 [time.parse] as indicated:
-17- If the from_stream overload fails to parse everything specified by the format string, or if insufficient information is parsed to specify a complete duration, time point, or calendrical data structure, setstate(ios_base::failbit) is called on the basic_istream.
-?- A format string can contain multiple flags that correspond to the same information, (e.g., "%Y %C%y" or "%R %H:%M"). If such a format string is successfully parsed but the extracted dates or times are not consistent, the value assigned to the tp argument is unspecified.
[Example:
The value of y is unspecified; y.ok() can be false. — end example]chrono::year y; stringstream("1905 1915") >> parse("%Y %C%y", y);