3639. Handling of fill character width is underspecified in std::format

Section: 28.5.2.2 [format.string.std] Status: Resolved Submitter: Victor Zverovich Opened: 2021-11-13 Last modified: 2023-03-23

Priority: 3

View other active issues in [format.string.std].

View all other issues in [format.string.std].

View all issues with Resolved status.

Discussion:

28.5.2.2 [format.string.std] doesn't specify if implementations should consider the estimated width of the fill character when substituting it into the formatted results.

For example:

auto s = std::format("{:🤡>10}", 42);

"🤡" (U+1F921) is a single code point but its estimated display width is two.

There are at least three possible resolutions:

  1. s == "🤡🤡🤡🤡42": use the estimated display width, correctly displayed on compatible terminals.

  2. s == "🤡🤡🤡🤡🤡🤡🤡🤡42": assume the display width of 1, incorrectly displayed.

  3. Require the fill character to have the estimated width of 1.

[2021-11-14; Daniel comments]

Resolving this issue should be harmonized with resolving LWG 3576.

[2022-01-30; Reflector poll]

Set priority to 3 after reflector poll. Sent to SG16.

[2023-01-11; LWG telecon]

P2572 would resolve this issue and LWG 3576.

[2023-03-22 Resolved by the adoption of P2572R1 in Issaquah. Status changed: SG16 → Resolved.]

Proposed resolution: