A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://cplusplus.github.io/LWG/issue3612 below:

Inconsistent pointer alignment in std::format

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

3612. Inconsistent pointer alignment in std::format

Section: 28.5.2.2 [format.string.std] Status: C++23 Submitter: Victor Zverovich Opened: 2021-10-02 Last modified: 2023-11-22

Priority: Not Prioritized

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

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

View all issues with C++23 status.

Discussion:

According to [tab:format.type.ptr] pointers are formatted as hexadecimal integers (at least in the common case when uintptr_t is available). However, it appears that they have left alignment by default according to [tab:format.align]:

Forces the field to be aligned to the start of the available space. This is the default for non-arithmetic types, charT, and bool, unless an integer presentation type is specified.

because pointers are not arithmetic types.

For example:
void* p = …
std::format("{:#16x}", std::bit_cast<uintptr_t>(p));
std::format("{:16}", p);

may produce " 0x7fff88716c84" and "0x7fff88716c84 " (the actual output depends on the value of p).

This is inconsistent and clearly a bug in specification that should have included pointers together with arithmetic types in [tab:format.align].

[2021-10-14; Reflector poll]

Set status to Tentatively Ready after seven votes in favour during reflector poll.

[2022-02-10 Approved at February 2022 virtual plenary. Status changed: Tentatively Ready → WP.]

Proposed resolution:

This wording is relative to N4892.

  1. Modify 28.5.2.2 [format.string.std], Table [tab:format.align], as indicated:

    Table 59 — Meaning of align options [tab:format.align] Option Meaning < Forces the field to be aligned to the start of the available space. This is the default for non-arithmetic non-pointer types, charT, and bool, unless an integer presentation type is specified. > Forces the field to be aligned to the end of the available space. This is the default for arithmetic types other than charT and bool , pointer types or when an integer presentation type is specified. […]

    [Drafting note: The wording above touches a similar area as LWG 3586(i). To help solving the merge conflict the following shows the delta of this proposed wording on top of the LWG 3586(i) merge result]

    Table 59 — Meaning of align options [tab:format.align] Option Meaning < Forces the field to be aligned to the start of the available space. This is the default when the presentation type is a non-arithmetic non-pointer type. > Forces the field to be aligned to the end of the available space. This is the default when the presentation type is an arithmetic or pointer type. […]

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4