4126. Some feature-test macros for fully freestanding features are not yet marked freestanding

Section: 17.3.2 [version.syn] Status: Tentatively Ready Submitter: Jiang An Opened: 2024-07-24 Last modified: 2024-08-02

Priority: 2

View other active issues in [version.syn].

View all other issues in [version.syn].

View all issues with Tentatively Ready status.

Discussion:

Currently (N4986), it's a bit weird in 17.3.2 [version.syn] that some feature-test macros are not marked freestanding, despite the indicated features being fully freestanding. The freestanding status seems sometimes implicitly covered by "also in" headers that are mostly or all freestanding, but sometimes not.

I think it's more consistent to ensure feature-test macros for fully freestanding features are also freestanding.

[2024-08-02; Reflector poll]

Set priority to 2 and set status to Tentatively Ready after seven votes in favour during reflector poll.

Proposed resolution:

This wording is relative to N4986.

  1. Modify 17.3.2 [version.syn] as indicated:

    [Drafting note: <charconv> is not fully freestanding, but all functions made constexpr by P2291R3 are furtherly made freestanding by P2338R4. ]

    […]
    #define __cpp_lib_common_reference                  202302L // freestanding, also in <type_traits>
    #define __cpp_lib_common_reference_wrapper          202302L // freestanding, also in <functional>
    […]                                                                              
    #define __cpp_lib_constexpr_charconv                202207L // freestanding, also in <charconv>
    […]                                                                              
    #define __cpp_lib_coroutine                         201902L // freestanding, also in <coroutine>
    […]                                                                              
    #define __cpp_lib_is_implicit_lifetime              202302L // freestanding, also in <type_traits>
    […]                                                                              
    #define __cpp_lib_is_virtual_base_of                202406L // freestanding, also in <type_traits>
    […]                                                                              
    #define __cpp_lib_is_within_lifetime                202306L // freestanding, also in <type_traits>
    […]                                                                              
    #define __cpp_lib_mdspan                            202406L // freestanding, also in <mdspan>
    […]                                                                              
    #define __cpp_lib_ratio                             202306L // freestanding, also in <ratio>
    […]                                                                              
    #define __cpp_lib_span_initializer_list             202311L // freestanding, also in <span>
    […]                                                                              
    #define __cpp_lib_submdspan                         202403L // freestanding, also in <mdspan>
    […]                                                                              
    #define __cpp_lib_to_array                          201907L // freestanding, also in <array>
    […]