%d
parse flag does not match POSIX and format
specificationSection: 30.13 [time.parse] Status: C++20 Submitter: Tomasz Kamiński Opened: 2019-06-13 Last modified: 2021-02-25
Priority: 0
View other active issues in [time.parse].
View all other issues in [time.parse].
View all issues with C++20 status.
Discussion:
Currently, the '%d
' parse flags accepts the 'E
' modifier to parse the
locale's alternative representation, see Table 88 —
"Meaning of parse
flags":
The modified command
%Ed
interprets the locale's alternative representation of the day of the month.
This is inconsistent with the
POSIX
strftime
specification and the format
functions, that uses 'O
'
to output alternate locale representation. Per Table 87 —
"Meaning of format
conversion specifiers":
The modified command
%Od
produces the locale's alternative representation.
[2019-06-24; Howard comments]
This was simply a type-o in my documentation that infected the proposal and subsequently the C++ working draft.
None ofstd::time_put
, C's strftime
, or POSIX's strftime
support
%Ed
but all support %Od
. Furthermore the existing example implementation
supports %Od
but not %Ed
. And all the existing example implementation
does is forward to std::time_put
.
[2019-07 Issue Prioritization]
Status to Tentatively Ready after five positive votes on the reflector.
Proposed resolution:
This wording is relative to N4810.
Modify 30.13 [time.parse], Table 88 — "Meaning of parse
flags",
as indicated:
Table 88 — Meaning of parse
flagsFlag Parsed value […]
%d
The day of the month as a decimal number. The modified command %Nd
specifies the maximum number of characters to read. IfN
is not specified, the default is 2. Leading zeroes are permitted but not required. The modified command%
interprets the locale's alternative representation of the day of the month.EOd[…]