Handling of fill character width is underspecified in std::format
Victor Zverovich

Created on 2021-11-13.00:00:00 last changed 10 months ago


Date: 2022-01-15.00:00:00

[ 2022-01-30; Reflector poll ]

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

Date: 2021-11-15.00:00:00

[ 2021-11-14; Daniel comments ]

Resolving this issue should be harmonized with resolving LWG 3576.

Date: 2021-11-13.00:00:00

[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.

Date User Action Args
2022-01-30 17:05:36adminsetmessages: + msg12316
2022-01-30 17:05:36adminsetstatus: new -> open
2021-11-14 12:59:30adminsetmessages: + msg12221
2021-11-13 00:00:00admincreate