3841. <version> should not be "all freestanding"

Section: 17.3.2 [version.syn] Status: C++23 Submitter: Jonathan Wakely Opened: 2022-12-14 Last modified: 2024-01-29

Priority: Not Prioritized

View other active issues in [version.syn].

View all other issues in [version.syn].

View all issues with C++23 status.

Discussion:

It's reasonable for the <version> header to be required for freestanding, so that users can include it and see the "implementation-dependent information … (e.g. version number and release date)", and also to ask which features are present (which is the real intended purpose of <version>). It seems less reasonable to require every macro to be present on freestanding implementations, even the ones that correspond to non-freestanding features.

P2198R7 will fix this situation for C++26, but we should also do something for C++23 before publishing it. It seems sensible not to require any of the macros to be present, and then allow implementations to define them for the features that they support.

[2023-01-06; Reflector poll]

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

[2023-02-13 Approved at February 2023 meeting in Issaquah. Status changed: Voting → WP.]

Proposed resolution:

This wording is relative to N4917.

  1. Modify 17.3.2 [version.syn], header <version> synopsis, as indicated:

    -2- Each of the macros defined in <version> is also defined after inclusion of any member of the set of library headers indicated in the corresponding comment in this synopsis.

    [Note 1: Future revisions of C++ might replace the values of these macros with greater values. — end note]

    // all freestanding
    #define __cpp_lib_addressof_constexpr          201603L // also in <memory>
    […]