This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of Immediate status.
<stdckdint.h> and <stdbit.h>Section: 17.3.2 [version.syn] Status: Immediate Submitter: Jonathan Wakely Opened: 2026-03-23 Last modified: 2026-03-24
Priority: Not Prioritized
View other active issues in [version.syn].
View all other issues in [version.syn].
View all issues with Immediate status.
Discussion:
The __STDC_VERSION_STDCKDINT_H__ macro defined by C is not sufficient to
check if a C++26 implementation provides a usable
<stdckdint.h> header.
If a libc header of that name is found somewhere in the C++ compiler's
include paths (e.g. in /usr/include) then it might be included
and would define the macro.
However, the libc version of the header might use C-specific features
such as _Bool or _Generic and cause errors in a C++ program.
A C++-specific macro would only be present in a C++-aware header,
and so a C++ program could check if that C++-specific macro is defined in
<version> to be sure that the header is usable in C++ code.
The same argument applies to <stdbit.h>.
[2026-03-23 Croydon; move to Immediate]
Proposed resolution:
This wording is relative to N5032.
Modify 17.3.2 [version.syn] as indicated:
#define __cpp_lib_starts_ends_with 201711L // also in <string>, <string_view> #define __cpp_lib_stdatomic_h 202011L // also in <stdatomic.h> #define __cpp_lib_stdbit_h 20YYMML // also in <stdbit.h> #define __cpp_lib_stdckdint_h 20YYMML // also in <stdckdint.h> #define __cpp_lib_string_contains 202011L // also in <string>, <string_view> #define __cpp_lib_string_resize_and_overwrite 202110L // also in <string>