Created on 2026-03-23.00:00:00 last changed 7 days ago
Proposed resolution:
This wording is relative to N5032.
Modify [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>
[ 2026-03-23 Croydon; move to Immediate ]
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>.
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2026-03-23 14:20:21 | admin | set | messages: + msg16043 |
| 2026-03-23 14:20:21 | admin | set | status: new -> immediate |
| 2026-03-23 12:10:33 | admin | set | messages: + msg16042 |
| 2026-03-23 00:00:00 | admin | create | |