This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++20 status.

### 3252. Parse locale's aware modifiers for commands are not consistent with POSIX spec

Section: 27.13 [time.parse] Status: C++20 Submitter: Tomasz Kamiński Opened: 2019-08-06 Last modified: 2021-02-25

Priority: 2

View all other issues in [time.parse].

View all issues with C++20 status.

Discussion:

The current specification of the locale modifiers for the parse flags in "[tab:time.parse.spec] Meaning of `parse` flags" is inconsistent with the POSIX `strptime` specification:

- New flags `%OC`, `%Ou` are added

- Flags `%OI`, `%OU`, `%OW` are missing

Per Howard's comment:

> I only invented in a couple places for these flags, and none of them involved locale-dependent stuff. If we are inconsistent with POSIX/C on this, it's a bug. Rationale, `std::get_time` is already specified in terms of `strptime`, and we can't afford to be inventive with locale-dependent things.

Note that, due above, the inconsistency between POSIX `strftime` specification that supports `%Ou` and `%OV` that are not handled by `strptime` should be (by design) reflected in "[tab:time.format.spec] Meaning of conversion specifiers" and "[tab:time.parse.spec] Meaning of `parse` flags" tables.

The `%d` modifier was addressed by LWG 3218.

[2020-02 Status to Immediate on Thursday morning in Prague.]

Proposed resolution:

This wording is relative to N4830.

1. Modify Table 99 "Meaning of `parse` flags [tab:time.parse.spec]" in 27.13 [time.parse] as indicated:

   > Table 99: Meaning of `parse` flags [tab:time.parse.spec]
   > Flag | Parsed value
   > --- | ---
   > `[…]`
   > `%C` | The century as a decimal number. The modified command `%NC` specifies the maximum number of characters to read. If `N` is not specified, the default is `2`. Leading zeroes are permitted but not required. The modified commands `%EC` and `%OC` interprets the locale's alternative representation of the century.
   > `[…]`
   > `%I` | The hour (12-hour clock) as a decimal number. The modified command `%NI` specifies the maximum number of characters to read. If `N` is not specified, the default is `2`. Leading zeroes are permitted but not required. The modified command `%OI` interprets the locale's alternative representation.
   > `[…]`
   > `%u` | The ISO weekday as a decimal number (`1-7`), where Monday is `1`. The modified command `%Nu` specifies the maximum number of characters to read. If `N` is not specified, the default is `1`. Leading zeroes are permitted but not required. The modified command `%Ou` interprets the locale's alternative representation.
   > `%U` | The week number of the year as a decimal number. The first Sunday of the year is the first day of week `01`. Days of the same year prior to that are in week `00`. The modified command `%NU` specifies the maximum number of characters to read. If `N` is not specified, the default is `2`. Leading zeroes are permitted but not required. The modified command `%OU` interprets the locale's alternative representation.
   > `[…]`
   > `%W` | The week number of the year as a decimal number. The first Monday of the year is the first day of week `01`. Days of the same year prior to that are in week `00`. The modified command `%NW` specifies the maximum number of characters to read. If `N` is not specified, the default is `2`. Leading zeroes are permitted but not required. The modified command `%OW` interprets the locale's alternative representation.
   > `[…]`