diff --git a/features_cpp20.yaml b/features_cpp20.yaml index b07a9a8..9b54475 100644 --- a/features_cpp20.yaml +++ b/features_cpp20.yaml @@ -1,5 +1,21 @@ --- features: + - desc: "Default member initializers for bit-fields" + paper: P0683 + support: + - GCC 8 + - Clang 6 + - MSVC 14.25 + - Xcode 10 + + - desc: "`const&`-qualified pointers to members" + paper: P0704 + support: + - GCC 8 + - Clang 6 + - MSVC 14.0 + - Xcode 10 + - desc: "Allow lambda capture `[=, this]`" paper: P0409 support: @@ -56,14 +72,6 @@ features: - name: __cpp_generic_lambdas value: 201707L - - desc: "Default member initializers for bit-fields" - paper: P0683 - support: - - GCC 8 - - Clang 6 - - MSVC 14.25 - - Xcode 10 - - desc: "Initializer list constructors in class template argument deduction" paper: P0702 support: @@ -72,14 +80,6 @@ features: - MSVC 14.14 - Xcode - - desc: "`const&`-qualified pointers to members" - paper: P0704 - support: - - GCC 8 - - Clang 6 - - MSVC 14.0 - - Xcode 10 - - desc: "Concepts" paper: P0734 summary: "Concepts are predicates that constrain template arguments. They provide clear error messages and enable function overloading based on type properties." @@ -98,42 +98,29 @@ features: - name: __cpp_concepts value: 201907L - - desc: "Wording for lambdas in unevaluated contexts" - paper: P0315 - support: - - GCC 9 - - Clang 13 (partial) - - Clang 14 (partial) - - Clang 17 - - MSVC 14.28 - - Xcode 13.4.1 (partial) - hints: - - target: Clang 13 - msg: "Not supported: [temp.deduct/9]" - - target: Clang 14 - msg: "temp.over.link changes" - - target: Xcode 13.4.1 - msg: "Not supported: [temp.deduct/9]" - - - desc: "Three-way comparison operator (`operator<=>`)" - paper: P0515 - summary: 'The "spaceship operator" for simplified comparisons.' - content: three-way-comparison.md + - desc: "`std::endian`" + paper: P0463 + lib: true support: - - GCC 10 - - Clang 8 (partial) - - Clang 10 - - MSVC 14.20 - - Xcode 12 + - GCC 8 + - Clang 7 + - MSVC 14.22 + - Xcode 10 ftm: - - name: __cpp_impl_three_way_comparison + - name: __cpp_lib_endian value: 201907L - - desc: "Simplifying implicit lambda capture" - paper: P0588 + - desc: "Extending `std::make_shared()` to support arrays" + paper: P0674 + lib: true support: - - GCC 8 - - MSVC 14.24 + - GCC 12 + - Clang 15 + - MSVC 14.27 + - Xcode 14.3 + ftm: + - name: __cpp_lib_shared_ptr_arrays + value: 201707L - desc: "init-statements for range-based for" paper: P0614 @@ -144,13 +131,19 @@ features: - MSVC 14.25 - Xcode 11 - - desc: "Default constructible and assignable stateless lambdas" - paper: P0624 + - desc: "Simplifying implicit lambda capture" + paper: P0588 + support: + - GCC 8 + - MSVC 14.24 + + - desc: "ADL and function templates that are not visible" + paper: P0846 support: - GCC 9 - - Clang 8 - - MSVC 14.22 - - Xcode 10.2 + - Clang 9 + - MSVC 14.21 + - Xcode 11.4 - desc: "`const` mismatch with defaulted copy constructor" paper: P0641 @@ -160,23 +153,6 @@ features: - MSVC 14.0 - Xcode 10.2 - - desc: "Access checking on specializations" - paper: P0692 - support: - - GCC - - Clang 8 (partial) - - Clang 14 - - MSVC 14.26 - - Xcode 14 - - - desc: "ADL and function templates that are not visible" - paper: P0846 - support: - - GCC 9 - - Clang 9 - - MSVC 14.21 - - Xcode 11.4 - - desc: "Specify when `constexpr` function definitions are needed for constant evaluation" paper: P0859 support: @@ -190,6 +166,35 @@ features: - name: __cpp_constexpr_in_decltype value: 201711L + - desc: "Three-way comparison operator (`operator<=>`)" + paper: P0515 + summary: 'The "spaceship operator" for simplified comparisons.' + content: three-way-comparison.md + support: + - GCC 10 + - Clang 8 (partial) + - Clang 10 + - MSVC 14.20 + - Xcode 12 + ftm: + - name: __cpp_impl_three_way_comparison + value: 201907L + + - desc: "Library support for `operator<=>` (``)" + paper: P0768 + lib: true + support: + - GCC 10 + - Clang 7 (partial) + - Clang 12 (partial) + - Clang 17 + - MSVC 14.20 (partial) + - MSVC 14.28 + - Xcode 13 + ftm: + - name: __cpp_lib_three_way_comparison + value: 201907L + - desc: "Fixing functionality gaps in constraints" paper: P0857 support: @@ -198,965 +203,843 @@ features: - Clang 16 - Xcode 12 - - desc: "Attributes `[[likely]]` and `[[unlikely]]`" - paper: P0479 - summary: "Hint to the compiler about branch probability." + - desc: "Access checking on specializations" + paper: P0692 support: - - GCC 9 - - Clang 12 + - GCC + - Clang 8 (partial) + - Clang 14 - MSVC 14.26 - - Xcode 13 + - Xcode 14 - - desc: "Down with `typename`!" - paper: P0634 + - desc: "Default constructible and assignable stateless lambdas" + paper: P0624 support: - GCC 9 - - Clang 16 - - MSVC 14.29 - - Xcode 16 + - Clang 8 + - MSVC 14.22 + - Xcode 10.2 - - desc: "Pack-expansions in lambda init-captures" - paper: P0780 - summary: "Capture parameter packs in lambda expressions." + - desc: "Wording for lambdas in unevaluated contexts" + paper: P0315 support: - GCC 9 - - Clang 9 - - MSVC 14.22 - - Xcode 11.4 + - Clang 13 (partial) + - Clang 14 (partial) + - Clang 17 + - MSVC 14.28 + - Xcode 13.4.1 (partial) + hints: + - target: Clang 13 + msg: "Not supported: [temp.deduct/9]" + - target: Clang 14 + msg: "temp.over.link changes" + - target: Xcode 13.4.1 + msg: "Not supported: [temp.deduct/9]" + + - desc: "Transformation trait `std::remove_cvref`" + paper: P0550 + lib: true + support: + - GCC 9 + - Clang 6 + - MSVC 14.20 + - Xcode 10 ftm: - - name: __cpp_init_captures - value: 201803L + - name: __cpp_lib_remove_cvref + value: 201711L - - desc: "Language support for empty objects (`[[no_unique_address]]` attribute)" - paper: P0840 - summary: "Allow empty class members to share address with other members." + - desc: "`[[nodiscard]]` in the library" + paper: P0600 + lib: true + support: + - GCC 9 + - Clang 7 (partial) + - Clang 16 + - MSVC 14.13 (partial) + - MSVC 14.22 + - Xcode 10 (partial) + - Xcode 15 + + - desc: "Make `std::memory_order` a scoped enumeration (`enum class`)" + paper: P0439 + lib: true support: - GCC 9 - Clang 9 - - MSVC 14.28 + - MSVC 14.25 - Xcode 11.4 - - desc: "Conditionally trivial special member functions" - paper: P0848 + - desc: "C++ Synchronized Buffered Ostream (`std::basic_osyncstream`)" + paper: P0053 + lib: true support: - - GCC 10 - - Clang 16 - - MSVC 14.28 - - Xcode 16.3 + - GCC 11 + - Clang 18 + - MSVC 14.29 ftm: - - name: __cpp_concepts - value: 202002L + - name: __cpp_lib_syncbuf + value: 201803L - - desc: "Relaxing the structured bindings customization point finding rules" - paper: P0961 + - desc: "Utility to convert a pointer to a raw pointer (`std::to_address()`)" + paper: P0653 + lib: true support: - GCC 8 - - Clang 8 - - MSVC 14.20 - - Xcode 10.2 + - Clang 6 + - MSVC 14.22 + - Xcode + ftm: + - name: __cpp_lib_to_address + value: 201711L - - desc: "Relaxing the range-`for` loop customization point finding rules" - paper: P0962 + - desc: "Add `constexpr` modifiers to functions in `` and ``" + paper: P0202 + lib: true support: - - GCC 8 - - Clang 8 - - MSVC 14.25 - - Xcode 11 + - GCC 10 + - Clang 8 (partial) + - Clang 12 + - MSVC 14.26 + - Xcode 10.2 (partial) + - Xcode 13 + ftm: + - name: __cpp_lib_constexpr_algorithms + value: 201806L - - desc: "Allow structured bindings to accessible members" - paper: P0969 + - desc: "`constexpr` for `std::complex`" + paper: P0415 + lib: true support: - - GCC 8 - - Clang 8 - - MSVC 14.20 - - Xcode 10.2 + - GCC 9 + - Clang 7 (partial) + - Clang 16 + - MSVC 14.27 + - Xcode 10 (partial) + - Xcode 15 + ftm: + - name: __cpp_lib_constexpr_complex + value: 201711L - - desc: "Destroying operator delete" - paper: P0722 - summary: "Custom deallocation with access to the object." + - desc: "Atomic `std::shared_ptr` and `std::weak_ptr`" + paper: P0718 + lib: true support: - - GCC 9 - - Clang 6 + - GCC 12 - MSVC 14.27 - - Xcode 10 ftm: - - name: __cpp_impl_destroying_delete - value: 201806L + - name: __cpp_lib_atomic_shared_ptr + value: 201711L - - desc: "Class types in non-type template parameters" - paper: P0732 + - desc: "Floating Point Atomic" + paper: P0020 + lib: true + support: + - GCC 10 + - Clang 18 + - MSVC 14.22 + - Xcode 16 + ftm: + - name: __cpp_lib_atomic_float + value: 201711L + + - desc: "Using `std::move()` in numeric algorithms" + paper: P0616 + lib: true support: - GCC 9 - Clang 12 - - MSVC 14.26 (partial) - - MSVC 14.28 - - Xcode 13 (partial) - - Xcode 16.3 + - MSVC 14.23 + - Xcode 13 - - desc: "Deprecate implicit capture of this via `[=]`" - paper: P0806 + - desc: "String prefix and suffix checking: `std::string` and `std::string_view` `starts_with()` and `ends_with()`" + paper: P0457 + lib: true support: - GCC 9 - - Clang 7 - - MSVC 14.22 - - Xcode 10.2 - keywords: - - lambda + - Clang 6 + - MSVC 14.21 + - Xcode 10 - - desc: "`explicit(bool)`" - paper: P0892 - summary: "Conditionally explicit constructors and conversions." + - desc: "Language support for empty objects (`[[no_unique_address]]` attribute)" + paper: P0840 + summary: "Allow empty class members to share address with other members." support: - GCC 9 - Clang 9 - - MSVC 14.24 + - MSVC 14.28 - Xcode 11.4 - ftm: - - name: __cpp_conditional_explicit - value: 201806L - - desc: "Integrating feature-test macros" - paper: P0941 + - desc: "Relaxing the range-`for` loop customization point finding rules" + paper: P0962 support: - - GCC 5 - - Clang 3.4 - - MSVC 14.15 (partial) + - GCC 8 + - Clang 8 + - MSVC 14.25 + - Xcode 11 + + - desc: "Allow structured bindings to accessible members" + paper: P0969 + support: + - GCC 8 + - Clang 8 - MSVC 14.20 - - Xcode + - Xcode 10.2 - - desc: "Prohibit aggregates with user-declared constructors" - paper: P1008 + - desc: "Relaxing the structured bindings customization point finding rules" + paper: P0961 support: - - GCC 9 + - GCC 8 - Clang 8 - MSVC 14.20 - Xcode 10.2 - - desc: "Allowing virtual function calls in constant expressions" - paper: P1064 + - desc: "Down with `typename`!" + paper: P0634 + support: + - GCC 9 + - Clang 16 + - MSVC 14.29 + - Xcode 16 + + - desc: "Pack-expansions in lambda init-captures" + paper: P0780 + summary: "Capture parameter packs in lambda expressions." support: - GCC 9 - Clang 9 - - MSVC 14.28 + - MSVC 14.22 - Xcode 11.4 ftm: - - name: __cpp_constexpr - value: 201907L - keywords: - - constexpr + - name: __cpp_init_captures + value: 201803L - - desc: "Consistency improvements for comparisons" - paper: P1120 + - desc: "Attributes `[[likely]]` and `[[unlikely]]`" + paper: P0479 + summary: "Hint to the compiler about branch probability." + support: + - GCC 9 + - Clang 12 + - MSVC 14.26 + - Xcode 13 + + - desc: "Symmetry for spaceship" + paper: P0905 + lib: true support: - GCC 10 - - Clang 8 (partial) - - Clang 10 - - MSVC 14.22 - - Xcode 12 + - Clang 7 + - Xcode 16.3 + - MSVC + ftm: + - name: __cpp_impl_three_way_comparison + value: 201711L - - desc: "`char8_t`: A type for UTF-8 characters and strings" - paper: P0482 - summary: "A distinct type for UTF-8 encoded characters and strings." + - desc: "``" + paper: P0754 + lib: true support: - GCC 9 - Clang 7 - MSVC 14.22 - Xcode 10 - ftm: - - name: __cpp_char8_t - value: 201811L - - desc: "`std::is_constant_evaluated()`" - paper: P0595 - summary: "Detect if code is running at compile time or runtime." + - desc: "Comparing unordered containers" + paper: P0809 lib: true support: - - GCC 9 - - Clang 9 - - MSVC 14.25 - - Xcode 11.4 + - GCC + - Clang + - MSVC 10.0 + - Xcode + + - desc: "Extending `` to calendars and time zones" + paper: P0355 + lib: true + support: + - GCC 11 (partial) + - GCC 13 (partial) + - GCC 14 + - Clang 7 (partial) + - Clang 19 (partial) + - MSVC 14.29 + - Xcode 10 (partial) ftm: - - name: __cpp_lib_is_constant_evaluated - value: 201811L + - name: __cpp_lib_chrono + value: 201907L - - desc: "`constexpr` try-catch blocks" - paper: P1002 + - desc: "`std::basic_string::reserve()` should not shrink" + paper: P0966 + lib: true support: - - GCC 9 + - GCC 11 - Clang 8 - MSVC 14.25 - Xcode 10.2 - - desc: "Immediate functions (`consteval`)" - paper: P1073 - summary: "Functions that must be evaluated at compile time." + - desc: "`std::span`" + paper: P0122 + lib: true support: - - GCC 10 (partial) - - GCC 11 - - Clang 11 (partial) - - Clang 14 (partial) - - Clang 17 - - MSVC 14.28 (partial) - - MSVC 14.29 - - Xcode 15 + - GCC 10 + - Clang 7 + - MSVC 14.26 + - Xcode 10 ftm: - - name: __cpp_consteval + - name: __cpp_lib_span + value: 202002L + + - desc: "[ConstexprIterator](https://en.cppreference.com/w/cpp/named_req/ConstexprIterator) requirements" + paper: P0858 + lib: true + support: + - GCC 9 + - Clang 12 + - MSVC 14.11 + - Xcode 13 + ftm: + - name: __cpp_lib_string_view + value: 201803L + - name: __cpp_lib_array_constexpr value: 201811L - - desc: "Nested inline namespaces" - paper: P1094 + - desc: "Deprecate implicit capture of this via `[=]`" + paper: P0806 support: - GCC 9 - - Clang 8 - - MSVC 14.27 + - Clang 7 + - MSVC 14.22 - Xcode 10.2 + keywords: + - lambda - - desc: "Yet another approach for constrained declarations" - paper: P1141 + - desc: "Class types in non-type template parameters" + paper: P0732 support: - - GCC 10 - - Clang 10 + - GCC 9 + - Clang 12 - MSVC 14.26 (partial) - MSVC 14.28 - - Xcode 12.5 - - - desc: "Signed integers are two's complement" - paper: P1236 - summary: "Signed integers are guaranteed to use two's complement representation." - support: - - GCC 9 - - Clang 9 - - MSVC - - Xcode 11.4 + - Xcode 13 (partial) + - Xcode 16.3 - - desc: "`dynamic_cast` and polymorphic `typeid` in constant expressions" - paper: P1327 + - desc: "Atomic compare-and-exchange with padding bits" + paper: P0528 + lib: true support: - - GCC 10 - - Clang 9 + - GCC 13 - MSVC 14.28 - - Xcode 11.4 - - desc: "Changing the active member of a `union` inside `constexpr`" - paper: P1330 + - desc: "Destroying operator delete" + paper: P0722 + summary: "Custom deallocation with access to the object." support: - GCC 9 - - Clang 9 - - MSVC 14.10 - - Xcode 10.3 - ftm: - - name: __cpp_constexpr - value: 202002L - - - desc: "Coroutines" - paper: - - P0912 - - LWG3393 - summary: "Suspendable functions for async programming and generators." - support: - - GCC 10 (hint) - - Clang 8 (partial) - - Clang 17 (partial) - - MSVC 14.0 (partial) - - MSVC 14.10 - - MSVC 14.28 - - Xcode 10.2 (partial) - hints: - - target: GCC 10 - msg: "Requires `-fcoroutines`. Starting with GCC 11, this is implicitly enabled by `-std=c++20`." - - target: Clang 17 - msg: "Fully supported on all targets except Windows, which still has some stability and ABI issues." - ftm: - - name: __cpp_impl_coroutine - value: 201902L - - name: __cpp_lib_coroutine - value: 201902L - - - desc: "Parenthesized initialization of aggregates" - paper: - - P0960 - - P1975 - support: - - GCC 10 - - Clang 16 - - MSVC 14.28 - - Xcode 16 + - Clang 6 + - MSVC 14.27 + - Xcode 10 ftm: - - name: __cpp_aggregate_paren_init - value: 201902L + - name: __cpp_impl_destroying_delete + value: 201806L - - desc: "Array size deduction in `new`-expressions" - paper: P1009 + - desc: "`std::destroying_delete_t`" + paper: P0722 + summary: "Custom deallocation with access to the object." + lib: true support: - - GCC 11 + - GCC 9 - Clang 9 - MSVC 14.27 - Xcode 11.4 - - - desc: "Modules" - paper: - - P1103 - - P1703 - - P1766 - - P1779 - - P1811 - - P1815 - - P1857 - - P1874 - - P1979 - - P2115 - - P2615 - - P2788 - summary: "Modern alternative to header files with better encapsulation and faster builds." - support: - - GCC 11 (partial) - - GCC 15 (hint) - - GCC 16 (hint) - - Clang 17 (partial) - - Clang 21 (partial) - - Clang 23 (partial) - - MSVC 14.0 (partial) - - MSVC 14.28 - - Xcode 26 (hint) - hints: - - target: GCC 11 - msg: "Supports the majority of modules features, except for P1815, private module fragments, parser-level global module entity merging and global module implications of extern \\\"C/C++\\\" (P1103)." - - target: GCC 15 - msg: "In addition to GCC 11, supports P2615." - - target: GCC 16 - msg: "In addition to GCC 15, supports P1766 and P1815." - - target: Clang 17 - msg: "Supports the majority of modules features, except for P1857, and P1815 is supported on all targets except Windows." - - target: Clang 21 - msg: "In addition to Clang 17, partially supports P1857, with the following note: _The restriction that '[a] module directive may only appear as the first preprocessing tokens in a file' is enforced starting in Clang 21._" - - target: Clang 23 - msg: "In addition to Clang 21, supports P1857." - - target: Xcode 26 - msg: > - Apple Clang requires the `-fcxx-modules` flag **in addition to** `-fmodules`.

Xcode 26 - does not ship the `clang-scan-deps` utility that is required by certain build system generators like - CMake, in order to scan module dependencies.
This means that C++ modules cannot be used in - conjunction with CMake's Xcode generator (`-G Xcode`). ftm: - - name: __cpp_modules - value: 201907L - - - desc: "Stronger Unicode requirements" - paper: - - P1041 - - P1139 - support: - - GCC 10 - - Clang - - MSVC 14.26 - - Xcode - - - desc: "`<=>` `!=` `==`" - paper: P1185 - support: - - GCC 10 - - Clang 10 - - MSVC 14.22 - - Xcode 12 + - name: __cpp_lib_destroying_delete + value: 201806L - - desc: "Explicitly defaulted functions with different exception specifications" - paper: P1286 + - desc: "Allowing virtual function calls in constant expressions" + paper: P1064 support: - - GCC 10 + - GCC 9 - Clang 9 - MSVC 14.28 - Xcode 11.4 - - - desc: "Structured binding extensions" - paper: - - P1091 - - P1381 - support: - - GCC 10 - - Clang 8 (partial) - - Clang 16 - - MSVC 14.11 - - MSVC 14.24 - - Xcode 16 - - - desc: "Permit conversions to arrays of unknown bound" - paper: P0388 - support: - - GCC 10 - - Clang 14 - - MSVC 14.27 - - Xcode 14 - - - desc: "`constexpr` container operations" - paper: P0784 - support: - - GCC 10 - - Clang 10 - - MSVC 14.28 - - Xcode 12 ftm: - - name: __cpp_constexpr_dynamic_alloc - value: 201907L - - - desc: "Deprecating some uses of `volatile`" - paper: P1152 - summary: "Certain volatile operations are deprecated." - support: - - GCC 10 - - Clang 10 - - MSVC 14.27 - - Xcode 12 - - - desc: "`constinit`" - paper: P1143 - summary: "Ensure static/thread-local variables are constant-initialized." - support: - - GCC 10 - - Clang 10 - - MSVC 14.29 - - Xcode 12 - ftm: - - name: __cpp_constinit + - name: __cpp_constexpr value: 201907L + keywords: + - constexpr - - desc: "Missing feature test macros" - paper: P1353R0 + - desc: "Prohibit aggregates with user-declared constructors" + paper: P1008 support: - GCC 9 - - Clang 9 - - MSVC 14.29 - - Xcode - - - desc: "Deprecate comma operator in subscripts" - paper: P1161 - support: - - GCC 10 - - Clang 9 - - MSVC 14.25 - - Xcode 11.4 - - - desc: '`[[nodiscard("should have a reason")]]`' - paper: P1301 - summary: "Add explanation to [[nodiscard]] warnings." - support: - - GCC 10 - - Clang 9 - - MSVC 14.25 - - Xcode 11.4 - - - desc: "Permitting trivial default initialization in `constexpr` contexts" - paper: P1331 - support: - - GCC 10 - - Clang 10 - - MSVC 14.27 - - Xcode 12 + - Clang 8 + - MSVC 14.20 + - Xcode 10.2 - - desc: "Unevaluated `asm`-declaration in `constexpr` functions" - paper: P1668 + - desc: "Consistency improvements for comparisons" + paper: P1120 support: - GCC 10 + - Clang 8 (partial) - Clang 10 - - MSVC 14.28 + - MSVC 14.22 - Xcode 12 - - desc: "`using` enum" - paper: P1099 - summary: "Import enum members into the current scope." - support: - - GCC 11 - - Clang 13 - - MSVC 14.24 - - Xcode 13.4.1 - ftm: - - name: __cpp_using_enum - value: 201907L - - - desc: "Synthesizing Three-way comparison for specified comparison category" - paper: P1186 + - desc: "Integrating feature-test macros" + paper: P0941 support: - - GCC 11 - - Clang 10 - - MSVC 14.24 - - Xcode 12 + - GCC 5 + - Clang 3.4 + - MSVC 14.15 (partial) + - MSVC 14.20 + - Xcode - - desc: "`[[nodiscard]]` for constructors" - paper: P1771 + - desc: "`explicit(bool)`" + paper: P0892 + summary: "Conditionally explicit constructors and conversions." support: - - GCC 10 + - GCC 9 - Clang 9 - MSVC 14.24 - Xcode 11.4 + ftm: + - name: __cpp_conditional_explicit + value: 201806L - - desc: "Class template argument deduction for alias templates" - paper: P1814 + - desc: "Guaranteed copy elision for piecewise construction" + paper: P0475 + lib: true support: - - GCC 10 - - Clang 19 (partial) - - MSVC 14.27 - hints: - - target: Clang 19 - msg: "This feature has been initially completed, but the feature macro `__cpp_deduction_guides` has not been updated." - ftm: - - name: __cpp_deduction_guides - value: 201907L + - GCC 9 + - Clang + - MSVC 14.29 + - Xcode - - desc: "Class template argument deduction for aggregates" - paper: - - P1816 - - P2082 + - desc: "`std::bit_cast()`" + paper: P0476 + lib: true support: - - GCC 10 - GCC 11 - - Clang 17 + - Clang 14 - MSVC 14.27 + - Xcode 14.3 ftm: - - name: __cpp_deduction_guides - value: 201907L + - name: __cpp_lib_bit_cast + value: 201806L - - desc: "Implicit move for more local objects and rvalue references" - paper: P1825 + - desc: "`contains()` member function of associative containers, e.g. `std::map::contains()`" + paper: P0458 + lib: true support: - - GCC 11 + - GCC 9 - Clang 13 - - MSVC 14.24 + - MSVC 14.21 - Xcode 13.4.1 - - desc: "Allow defaulting comparisons by value" - paper: P1946 + - desc: "`constexpr` comparison operators for `std::array`" + paper: P1023 + lib: true support: - GCC 10 - - Clang 10 - - MSVC 14.25 - - Xcode 12 + - Clang 8 + - MSVC 14.27 + - Xcode 10.2 - - desc: "Remove `std::weak_equality` and `std::strong_equality`" - paper: P1959 + - desc: "Add `std::shift_left()` and `std::shift_right()` to ``" + paper: P0769 + lib: true support: - GCC 10 - - Clang 10 - - MSVC 14.25 - - Xcode 12 - - - desc: "Inconsistencies with constant template parameters" - paper: P1907 - support: - - GCC 10 (partial) - - GCC 11 - - Clang 18 (partial) - - MSVC 14.26 - - Xcode 13.4.1 (partial) + - Clang 12 + - MSVC 14.21 + - Xcode 13 ftm: - - name: __cpp_nontype_template_args - value: 201911L - - - desc: "Pseudo-destructors end object lifetimes" - paper: P0593 - support: - - GCC 11 - - Clang 11 - - MSVC - - Xcode 12.5 + - name: __cpp_lib_shift + value: 201806L - - desc: "`std::endian`" - paper: P0463 + - desc: "`std::type_identity`" + paper: P0887 lib: true support: - - GCC 8 - - Clang 7 - - MSVC 14.22 - - Xcode 10 + - GCC 9 + - Clang 8 + - MSVC 14.21 + - Xcode 10.2 ftm: - - name: __cpp_lib_endian - value: 201907L + - name: __cpp_lib_type_identity + value: 201806L - - desc: "Extending `std::make_shared()` to support arrays" - paper: P0674 + - desc: "`constexpr` for `std::swap()` and swap related functions" + paper: P0879 lib: true support: - - GCC 12 - - Clang 15 - - MSVC 14.27 - - Xcode 14.3 - ftm: - - name: __cpp_lib_shared_ptr_arrays - value: 201707L + - GCC 10 + - Clang 13 + - MSVC 14.26 + - Xcode 13.4.1 - - desc: "Floating Point Atomic" - paper: P0020 + - desc: "`std::is_convertible`" + paper: P0758 lib: true support: - - GCC 10 - - Clang 18 - - MSVC 14.22 - - Xcode 16 + - GCC 9 + - Clang 9 + - MSVC 14.23 + - Xcode 11.4 ftm: - - name: __cpp_lib_atomic_float - value: 201711L + - name: __cpp_lib_is_nothrow_convertible + value: 201806L - - desc: "C++ Synchronized Buffered Ostream (`std::basic_osyncstream`)" - paper: P0053 + - desc: "Integral power-of-2 operations: `std::bit_ceil()`, `std::bit_floor()`, `std::bit_width()`, `std::has_single_bit()`" + paper: + - P0556 + - P1956 lib: true support: - - GCC 11 - - Clang 18 - - MSVC 14.29 + - GCC 9 + - GCC 10 + - Clang 9 + - Clang 12 + - MSVC 14.28 + - Xcode 11.4 + - Xcode 13 ftm: - - name: __cpp_lib_syncbuf - value: 201803L + - name: __cpp_lib_int_pow2 + value: 202002L - - desc: "Add `constexpr` modifiers to functions in `` and ``" - paper: P0202 + - desc: "`std::atomic_ref`" + paper: P0019 lib: true support: - GCC 10 - - Clang 8 (partial) - - Clang 12 - - MSVC 14.26 - - Xcode 10.2 (partial) - - Xcode 13 + - Clang 19 + - MSVC 14.28 + - Xcode 16.3 ftm: - - name: __cpp_lib_constexpr_algorithms + - name: __cpp_lib_atomic_ref value: 201806L - - desc: "`constexpr` for `std::complex`" - paper: P0415 + - desc: "Improving the return value of erase-like algorithms" + paper: P0646 lib: true support: - GCC 9 - - Clang 7 (partial) - - Clang 16 - - MSVC 14.27 - - Xcode 10 (partial) - - Xcode 15 + - Clang 10 + - MSVC 14.21 + - Xcode 12 ftm: - - name: __cpp_lib_constexpr_complex - value: 201711L + - name: __cpp_lib_list_remove_return_type + value: 201806L - - desc: "Make `std::memory_order` a scoped enumeration (`enum class`)" - paper: P0439 + - desc: "Reviewing deprecated facilities of C++17 for C++20" + paper: P0619 lib: true support: - - GCC 9 - - Clang 9 - - MSVC 14.25 - - Xcode 11.4 + - GCC 12 + - MSVC 14.26 + - Clang 20 (hint) + - Xcode 26 + hints: + - target: Clang 20 + msg: "Removed headers are still provided as an extension, but with deprecation warnings." - - desc: "String prefix and suffix checking: `std::string` and `std::string_view` `starts_with()` and `ends_with()`" - paper: P0457 + - desc: "Concepts library" + paper: P0898 lib: true + support: + - GCC 10 + - Clang 13 + - MSVC 14.23 + - Xcode 13.4.1 + ftm: + - name: __cpp_lib_concepts + value: 202002L + + - desc: "`constexpr` try-catch blocks" + paper: P1002 support: - GCC 9 - - Clang 6 - - MSVC 14.21 - - Xcode 10 + - Clang 8 + - MSVC 14.25 + - Xcode 10.2 - - desc: "Library support for `operator<=>` (``)" - paper: P0768 - lib: true + - desc: "`dynamic_cast` and polymorphic `typeid` in constant expressions" + paper: P1327 support: - GCC 10 - - Clang 7 (partial) - - Clang 12 (partial) - - Clang 17 - - MSVC 14.20 (partial) + - Clang 9 - MSVC 14.28 - - Xcode 13 - ftm: - - name: __cpp_lib_three_way_comparison - value: 201907L + - Xcode 11.4 - - desc: "Transformation trait `std::remove_cvref`" - paper: P0550 - lib: true + - desc: "Signed integers are two's complement" + paper: P1236 + summary: "Signed integers are guaranteed to use two's complement representation." support: - GCC 9 - - Clang 6 - - MSVC 14.20 + - Clang 9 + - MSVC + - Xcode 11.4 + + - desc: "`char8_t`: A type for UTF-8 characters and strings" + paper: P0482 + summary: "A distinct type for UTF-8 encoded characters and strings." + support: + - GCC 9 + - Clang 7 + - MSVC 14.22 - Xcode 10 ftm: - - name: __cpp_lib_remove_cvref - value: 201711L + - name: __cpp_char8_t + value: 201811L - - desc: "`[[nodiscard]]` in the library" - paper: P0600 + - desc: "Library support for `char8_t`" + paper: P0482 + summary: "A distinct type for UTF-8 encoded characters and strings." lib: true support: - GCC 9 - - Clang 7 (partial) + - Clang 8 (partial) - Clang 16 - - MSVC 14.13 (partial) - MSVC 14.22 - - Xcode 10 (partial) + - Xcode 10.2 (partial) - Xcode 15 + ftm: + - name: __cpp_lib_char8_t + value: 201907L - - desc: "Using `std::move()` in numeric algorithms" - paper: P0616 - lib: true + - desc: "Missing feature test macros" + paper: P1353R0 support: - GCC 9 - - Clang 12 - - MSVC 14.23 - - Xcode 13 - - - desc: "Utility to convert a pointer to a raw pointer (`std::to_address()`)" - paper: P0653 - lib: true - support: - - GCC 8 - - Clang 6 - - MSVC 14.22 + - Clang 9 + - MSVC 14.29 - Xcode - ftm: - - name: __cpp_lib_to_address - value: 201711L - - desc: "Atomic `std::shared_ptr` and `std::weak_ptr`" - paper: P0718 - lib: true + - desc: "Immediate functions (`consteval`)" + paper: P1073 + summary: "Functions that must be evaluated at compile time." support: - - GCC 12 - - MSVC 14.27 + - GCC 10 (partial) + - GCC 11 + - Clang 11 (partial) + - Clang 14 (partial) + - Clang 17 + - MSVC 14.28 (partial) + - MSVC 14.29 + - Xcode 15 ftm: - - name: __cpp_lib_atomic_shared_ptr - value: 201711L + - name: __cpp_consteval + value: 201811L - - desc: "`std::span`" - paper: P0122 + - desc: "`std::is_constant_evaluated()`" + paper: P0595 + summary: "Detect if code is running at compile time or runtime." lib: true support: - - GCC 10 - - Clang 7 - - MSVC 14.26 - - Xcode 10 + - GCC 9 + - Clang 9 + - MSVC 14.25 + - Xcode 11.4 ftm: - - name: __cpp_lib_span - value: 202002L + - name: __cpp_lib_is_constant_evaluated + value: 201811L - - desc: "Extending `` to calendars and time zones" - paper: P0355 - lib: true + - desc: "Yet another approach for constrained declarations" + paper: P1141 support: - - GCC 11 (partial) - - GCC 13 (partial) - - GCC 14 - - Clang 7 (partial) - - Clang 19 (partial) - - MSVC 14.29 - - Xcode 10 (partial) - ftm: - - name: __cpp_lib_chrono - value: 201907L + - GCC 10 + - Clang 10 + - MSVC 14.26 (partial) + - MSVC 14.28 + - Xcode 12.5 - - desc: "``" - paper: P0754 - lib: true + - desc: "Nested inline namespaces" + paper: P1094 support: - GCC 9 - - Clang 7 - - MSVC 14.22 - - Xcode 10 - - - desc: "Comparing unordered containers" - paper: P0809 - lib: true - support: - - GCC - - Clang - - MSVC 10.0 - - Xcode + - Clang 8 + - MSVC 14.27 + - Xcode 10.2 - - desc: "[ConstexprIterator](https://en.cppreference.com/w/cpp/named_req/ConstexprIterator) requirements" - paper: P0858 - lib: true + - desc: "Changing the active member of a `union` inside `constexpr`" + paper: P1330 support: - GCC 9 - - Clang 12 - - MSVC 14.11 - - Xcode 13 + - Clang 9 + - MSVC 14.10 + - Xcode 10.3 ftm: - - name: __cpp_lib_string_view - value: 201803L - - name: __cpp_lib_array_constexpr - value: 201811L + - name: __cpp_constexpr + value: 202002L - - desc: "`std::basic_string::reserve()` should not shrink" - paper: P0966 + - desc: "Fixing `operator>>(basic_istream&, CharT*)`" + paper: P0487 lib: true support: - GCC 11 - Clang 8 - - MSVC 14.25 + - MSVC 14.23 - Xcode 10.2 - - desc: "Atomic compare-and-exchange with padding bits" - paper: P0528 - lib: true - support: - - GCC 13 - - MSVC 14.28 - - - desc: "`std::atomic_ref`" - paper: P0019 + - desc: "`std::variant` and `std::optional` should propagate copy/move triviality" + paper: P0602 lib: true support: - - GCC 10 - - Clang 19 - - MSVC 14.28 - - Xcode 16.3 - ftm: - - name: __cpp_lib_atomic_ref - value: 201806L + - GCC 8.3 + - Clang 8 + - MSVC 14.11 + - Xcode 10.2 - - desc: "`contains()` member function of associative containers, e.g. `std::map::contains()`" - paper: P0458 + - desc: "`` `zero()`, `min()` and `max()` should be `noexcept`" + paper: P0972 lib: true support: - GCC 9 - - Clang 13 - - MSVC 14.21 - - Xcode 13.4.1 + - Clang 8 + - MSVC 14.14 + - Xcode 10.2 - - desc: "Guaranteed copy elision for piecewise construction" - paper: P0475 + - desc: "`constexpr` in `std::pointer_traits`" + paper: P1006 lib: true support: - GCC 9 - - Clang - - MSVC 14.29 - - Xcode - - - desc: "`std::bit_cast()`" - paper: P0476 - lib: true - support: - - GCC 11 - - Clang 14 - - MSVC 14.27 - - Xcode 14.3 + - Clang 8 + - MSVC 14.26 + - Xcode 10.2 ftm: - - name: __cpp_lib_bit_cast - value: 201806L + - name: __cpp_lib_constexpr_memory + value: 201811L - - desc: "Integral power-of-2 operations: `std::bit_ceil()`, `std::bit_floor()`, `std::bit_width()`, `std::has_single_bit()`" - paper: - - P0556 - - P1956 + - desc: "Misc `constexpr` bits" + paper: P1032 lib: true support: - - GCC 9 - GCC 10 - - Clang 9 - - Clang 12 + - Clang 13 - MSVC 14.28 - - Xcode 11.4 - - Xcode 13 + - Xcode 13.4.1 ftm: - - name: __cpp_lib_int_pow2 - value: 202002L + - name: __cpp_lib_array_constexpr + value: 201811L + - name: __cpp_lib_constexpr_functional + value: 201907L + - name: __cpp_lib_constexpr_iterator + value: 201811L + - name: __cpp_lib_constexpr_tuple + value: 201811L + - name: __cpp_lib_constexpr_utility + value: 201811L + - name: __cpp_lib_constexpr_string_view + value: 201811L - - desc: "Improving the return value of erase-like algorithms" - paper: P0646 + - desc: "`std::unwrap_ref_decay` and `std::unwrap_reference`" + paper: P0318 lib: true support: - GCC 9 - - Clang 10 + - Clang 8 - MSVC 14.21 - - Xcode 12 - ftm: - - name: __cpp_lib_list_remove_return_type - value: 201806L - - - desc: "`std::destroying_delete_t`" - paper: P0722 - summary: "Custom deallocation with access to the object." - lib: true - support: - - GCC 9 - - Clang 9 - - MSVC 14.27 - - Xcode 11.4 + - Xcode 10.2 ftm: - - name: __cpp_lib_destroying_delete - value: 201806L + - name: __cpp_lib_unwrap_ref + value: 201811L - - desc: "`std::is_convertible`" - paper: P0758 + - desc: "`std::reference_wrapper` for incomplete types" + paper: P0357 lib: true support: - - GCC 9 - - Clang 9 - - MSVC 14.23 - - Xcode 11.4 - ftm: - - name: __cpp_lib_is_nothrow_convertible - value: 201806L + - GCC 9 + - Clang 8 + - MSVC 14.26 + - Xcode 10.2 - - desc: "Add `std::shift_left()` and `std::shift_right()` to ``" - paper: P0769 + - desc: "A sane `std::variant` converting constructor" + paper: P0608 lib: true support: - GCC 10 - - Clang 12 - - MSVC 14.21 - - Xcode 13 - ftm: - - name: __cpp_lib_shift - value: 201806L + - Clang 9 + - MSVC 14.29 + - MSVC 14.42 + - Xcode 11.4 - - desc: "`constexpr` for `std::swap()` and swap related functions" - paper: P0879 + - desc: "`std::function`'s move constructor should be `noexcept`" + paper: P0771 lib: true support: - - GCC 10 - - Clang 13 - - MSVC 14.26 - - Xcode 13.4.1 + - GCC 7.2 + - Clang 6 + - MSVC 14.22 + - Xcode - - desc: "`std::type_identity`" - paper: P0887 + - desc: "`std::assume_aligned()`" + paper: P1007 lib: true support: - GCC 9 - - Clang 8 - - MSVC 14.21 - - Xcode 10.2 + - GCC 11 + - Clang 15 + - MSVC 14.28 + - Xcode 14.3 ftm: - - name: __cpp_lib_type_identity - value: 201806L + - name: __cpp_lib_assume_aligned + value: 201811L - - desc: "Concepts library" - paper: P0898 + - desc: "Smart pointer creation with default initialization (e.g. `std::make_unique_for_overwrite()`)" + paper: + - P1020 + - P1973 lib: true support: - - GCC 10 - - Clang 13 - - MSVC 14.23 - - Xcode 13.4.1 + - GCC 11 + - GCC 12 + - Clang 16 + - MSVC 14.28 + - Xcode 15 ftm: - - name: __cpp_lib_concepts + - name: __cpp_lib_smart_ptr_for_overwrite value: 202002L - - desc: "`constexpr` comparison operators for `std::array`" - paper: P1023 + - desc: "Utility functions to implement uses-allocator construction" + paper: P0591 + lib: true + support: + - GCC 9 + - Clang 16 + - MSVC 14.29 + - Xcode 15 + + - desc: "Remove comparison operators of `std::span`" + paper: P1085 lib: true support: - GCC 10 - Clang 8 - - MSVC 14.27 + - MSVC 14.26 - Xcode 10.2 - - desc: "`std::unwrap_ref_decay` and `std::unwrap_reference`" - paper: P0318 + - desc: "Make stateful allocator propagation more consistent for `operator+(basic_string)`" + paper: P1165 lib: true support: - - GCC 9 - - Clang 8 - - MSVC 14.21 - - Xcode 10.2 + - GCC 10 + - Clang 15 + - MSVC 14.26 + - Xcode 14.3 + + - desc: "The One Ranges Proposal" + paper: P0896 + lib: true + support: + - GCC 10 + - Clang 13 (partial) + - Clang 15 + - MSVC 14.29 + - Xcode 14.3 ftm: - - name: __cpp_lib_unwrap_ref - value: 201811L + - name: __cpp_lib_ranges + value: 201911L - desc: "`std::bind_front()`" paper: P0356 @@ -1170,299 +1053,499 @@ features: - name: __cpp_lib_bind_front value: 201907L - - desc: "`std::reference_wrapper` for incomplete types" - paper: P0357 + - desc: "Heterogeneous lookup for unordered associative containers" + paper: + - P0919 + - P1690 lib: true support: - - GCC 9 - - Clang 8 - - MSVC 14.26 - - Xcode 10.2 + - GCC 11 + - Clang 12 + - MSVC 14.23 + - MSVC 14.25 + - Xcode 13 + ftm: + - name: __cpp_lib_generic_unordered_lookup + value: 201811L - - desc: "Fixing `operator>>(basic_istream&, CharT*)`" - paper: P0487 + - desc: "Consistent container erasure (`std::erase()` and `std::erase_if()`)" + paper: + - P1209 + - P1115 lib: true support: - - GCC 11 + - GCC 9 + - GCC 10 - Clang 8 - - MSVC 14.23 + - Clang 11 + - MSVC 14.25 + - MSVC 14.27 - Xcode 10.2 + - Xcode 12.5 + ftm: + - name: __cpp_lib_erase_if + value: 202002L - - desc: "Library support for `char8_t`" - paper: P0482 - summary: "A distinct type for UTF-8 encoded characters and strings." - lib: true + - desc: "Explicitly defaulted functions with different exception specifications" + paper: P1286 support: - - GCC 9 + - GCC 10 + - Clang 9 + - MSVC 14.28 + - Xcode 11.4 + + - desc: "Structured binding extensions" + paper: + - P1091 + - P1381 + support: + - GCC 10 - Clang 8 (partial) - Clang 16 + - MSVC 14.11 + - MSVC 14.24 + - Xcode 16 + + - desc: "Stronger Unicode requirements" + paper: + - P1041 + - P1139 + support: + - GCC 10 + - Clang + - MSVC 14.26 + - Xcode + + - desc: "Parenthesized initialization of aggregates" + paper: + - P0960 + - P1975 + support: + - GCC 10 + - Clang 16 + - MSVC 14.28 + - Xcode 16 + ftm: + - name: __cpp_aggregate_paren_init + value: 201902L + + - desc: "Array size deduction in `new`-expressions" + paper: P1009 + support: + - GCC 11 + - Clang 9 + - MSVC 14.27 + - Xcode 11.4 + + - desc: "Modules" + paper: + - P1103 + - P1703 + - P1766 + - P1779 + - P1811 + - P1815 + - P1857 + - P1874 + - P1979 + - P2115 + - P2615 + - P2788 + summary: "Modern alternative to header files with better encapsulation and faster builds." + support: + - GCC 11 (partial) + - GCC 15 (hint) + - GCC 16 (hint) + - Clang 17 (partial) + - Clang 21 (partial) + - Clang 23 (partial) + - MSVC 14.0 (partial) + - MSVC 14.28 + - Xcode 26 (hint) + hints: + - target: GCC 11 + msg: "Supports the majority of modules features, except for P1815, private module fragments, parser-level global module entity merging and global module implications of extern \\\"C/C++\\\" (P1103)." + - target: GCC 15 + msg: "In addition to GCC 11, supports P2615." + - target: GCC 16 + msg: "In addition to GCC 15, supports P1766 and P1815." + - target: Clang 17 + msg: "Supports the majority of modules features, except for P1857, and P1815 is supported on all targets except Windows." + - target: Clang 21 + msg: "In addition to Clang 17, partially supports P1857, with the following note: _The restriction that '[a] module directive may only appear as the first preprocessing tokens in a file' is enforced starting in Clang 21._" + - target: Clang 23 + msg: "In addition to Clang 21, supports P1857." + - target: Xcode 26 + msg: > + Apple Clang requires the `-fcxx-modules` flag **in addition to** `-fmodules`.

Xcode 26 + does not ship the `clang-scan-deps` utility that is required by certain build system generators like + CMake, in order to scan module dependencies.
This means that C++ modules cannot be used in + conjunction with CMake's Xcode generator (`-G Xcode`). + ftm: + - name: __cpp_modules + value: 201907L + + - desc: "`<=>` `!=` `==`" + paper: P1185 + support: + - GCC 10 + - Clang 10 - MSVC 14.22 + - Xcode 12 + + - desc: "Coroutines" + paper: + - P0912 + - LWG3393 + summary: "Suspendable functions for async programming and generators." + support: + - GCC 10 (hint) + - Clang 8 (partial) + - Clang 17 (partial) + - MSVC 14.0 (partial) + - MSVC 14.10 + - MSVC 14.28 - Xcode 10.2 (partial) - - Xcode 15 + hints: + - target: GCC 10 + msg: "Requires `-fcoroutines`. Starting with GCC 11, this is implicitly enabled by `-std=c++20`." + - target: Clang 17 + msg: "Fully supported on all targets except Windows, which still has some stability and ABI issues." ftm: - - name: __cpp_lib_char8_t - value: 201907L + - name: __cpp_impl_coroutine + value: 201902L + - name: __cpp_lib_coroutine + value: 201902L - - desc: "Utility functions to implement uses-allocator construction" - paper: P0591 + - desc: "`pmr::polymorphic_allocator<>` as a vocabulary type" + paper: P0339 lib: true support: - GCC 9 - Clang 16 - - MSVC 14.29 + - MSVC 14.28 - Xcode 15 + ftm: + - name: __cpp_lib_polymorphic_allocator + value: 201902L - - desc: "`std::variant` and `std::optional` should propagate copy/move triviality" - paper: P0602 + - desc: "Make `filesystem::create_directory()` intuitive" + paper: P1164 lib: true support: - GCC 8.3 - - Clang 8 - - MSVC 14.11 - - Xcode 10.2 + - Clang 12 + - MSVC 14.20 + - Xcode 13 - - desc: "A sane `std::variant` converting constructor" - paper: P0608 + - desc: "`std::lerp()` and `std::midpoint()`" + paper: P0811 lib: true support: - - GCC 10 + - GCC 9 - Clang 9 - - MSVC 14.29 - - MSVC 14.42 + - MSVC 14.23 + - MSVC 14.28 - Xcode 11.4 + ftm: + - name: __cpp_lib_interpolate + value: 201902L - - desc: "`std::function`'s move constructor should be `noexcept`" - paper: P0771 + - desc: "Target Vectorization Policies from Parallelism V2 TS to C++20 (`std::execution::unseq`)" + paper: P1001 lib: true support: - - GCC 7.2 - - Clang 6 - - MSVC 14.22 - - Xcode + - GCC 9 + - Clang 17 (hint) + - MSVC 14.28 + hints: + - target: Clang 17 + msg: "Not supported by Clang on macOS." + ftm: + - name: __cpp_lib_execution + value: 201902L - - desc: "The One Ranges Proposal" - paper: P0896 + - desc: "`std::ssize()` and unsigned extent for `std::span`" + paper: P1227 lib: true support: - GCC 10 - - Clang 13 (partial) - - Clang 15 - - MSVC 14.29 - - Xcode 14.3 + - Clang 9 + - MSVC 14.25 + - Xcode 11.4 ftm: - - name: __cpp_lib_ranges - value: 201911L + - name: __cpp_lib_ssize + value: 201902L - - desc: "Heterogeneous lookup for unordered associative containers" - paper: - - P0919 - - P1690 + - desc: "Usability enhancements for `std::span`" + paper: P1024 lib: true support: - - GCC 11 - - Clang 12 - - MSVC 14.23 - - MSVC 14.25 - - Xcode 13 - ftm: - - name: __cpp_lib_generic_unordered_lookup - value: 201811L + - GCC 10 + - Clang 9 + - Clang 14 + - MSVC 14.26 + - Xcode 11.4 - - desc: "`` `zero()`, `min()` and `max()` should be `noexcept`" - paper: P0972 + - desc: "Traits for (un)bounded arrays" + paper: P1357 lib: true support: - GCC 9 - - Clang 8 - - MSVC 14.14 - - Xcode 10.2 + - Clang 9 + - MSVC 14.25 + - Xcode 11.4 + ftm: + - name: __cpp_lib_bounded_array_traits + value: 201902L - - desc: "`constexpr` in `std::pointer_traits`" - paper: P1006 - lib: true + - desc: "Deprecate comma operator in subscripts" + paper: P1161 support: - - GCC 9 - - Clang 8 - - MSVC 14.26 - - Xcode 10.2 + - GCC 10 + - Clang 9 + - MSVC 14.25 + - Xcode 11.4 + + - desc: "Permitting trivial default initialization in `constexpr` contexts" + paper: P1331 + support: + - GCC 10 + - Clang 10 + - MSVC 14.27 + - Xcode 12 + + - desc: "Conditionally trivial special member functions" + paper: P0848 + support: + - GCC 10 + - Clang 16 + - MSVC 14.28 + - Xcode 16.3 ftm: - - name: __cpp_lib_constexpr_memory - value: 201811L + - name: __cpp_concepts + value: 202002L - - desc: "`std::assume_aligned()`" - paper: P1007 - lib: true + - desc: "Synthesizing Three-way comparison for specified comparison category" + paper: P1186 support: - - GCC 9 - GCC 11 - - Clang 15 - - MSVC 14.28 - - Xcode 14.3 + - Clang 10 + - MSVC 14.24 + - Xcode 12 + + - desc: '`[[nodiscard("should have a reason")]]`' + paper: P1301 + summary: "Add explanation to [[nodiscard]] warnings." + support: + - GCC 10 + - Clang 9 + - MSVC 14.25 + - Xcode 11.4 + + - desc: "`using` enum" + paper: P1099 + summary: "Import enum members into the current scope." + support: + - GCC 11 + - Clang 13 + - MSVC 14.24 + - Xcode 13.4.1 ftm: - - name: __cpp_lib_assume_aligned - value: 201811L + - name: __cpp_using_enum + value: 201907L - - desc: "Smart pointer creation with default initialization (e.g. `std::make_unique_for_overwrite()`)" + - desc: "Class template argument deduction for aggregates" paper: - - P1020 - - P1973 - lib: true + - P1816 + - P2082 support: + - GCC 10 - GCC 11 - - GCC 12 - - Clang 16 - - MSVC 14.28 - - Xcode 15 + - Clang 17 + - MSVC 14.27 ftm: - - name: __cpp_lib_smart_ptr_for_overwrite - value: 202002L + - name: __cpp_deduction_guides + value: 201907L - - desc: "Misc `constexpr` bits" - paper: P1032 - lib: true + - desc: "Unevaluated `asm`-declaration in `constexpr` functions" + paper: P1668 support: - GCC 10 - - Clang 13 + - Clang 10 - MSVC 14.28 - - Xcode 13.4.1 + - Xcode 12 + + - desc: "Permit conversions to arrays of unknown bound" + paper: P0388 + support: + - GCC 10 + - Clang 14 + - MSVC 14.27 + - Xcode 14 + + - desc: "`constinit`" + paper: P1143 + summary: "Ensure static/thread-local variables are constant-initialized." + support: + - GCC 10 + - Clang 10 + - MSVC 14.29 + - Xcode 12 ftm: - - name: __cpp_lib_array_constexpr - value: 201811L - - name: __cpp_lib_constexpr_functional + - name: __cpp_constinit value: 201907L - - name: __cpp_lib_constexpr_iterator - value: 201811L - - name: __cpp_lib_constexpr_tuple - value: 201811L - - name: __cpp_lib_constexpr_utility - value: 201811L - - name: __cpp_lib_constexpr_string_view - value: 201811L - - desc: "Remove comparison operators of `std::span`" - paper: P1085 - lib: true + - desc: "Deprecating some uses of `volatile`" + paper: P1152 + summary: "Certain volatile operations are deprecated." support: - GCC 10 - - Clang 8 - - MSVC 14.26 - - Xcode 10.2 + - Clang 10 + - MSVC 14.27 + - Xcode 12 - - desc: "Make stateful allocator propagation more consistent for `operator+(basic_string)`" - paper: P1165 - lib: true + - desc: "`[[nodiscard]]` for constructors" + paper: P1771 support: - GCC 10 - - Clang 15 - - MSVC 14.26 - - Xcode 14.3 + - Clang 9 + - MSVC 14.24 + - Xcode 11.4 - - desc: "Consistent container erasure (`std::erase()` and `std::erase_if()`)" - paper: - - P1209 - - P1115 - lib: true + - desc: "Class template argument deduction for alias templates" + paper: P1814 support: - - GCC 9 - GCC 10 - - Clang 8 - - Clang 11 - - MSVC 14.25 + - Clang 19 (partial) - MSVC 14.27 - - Xcode 10.2 - - Xcode 12.5 + hints: + - target: Clang 19 + msg: "This feature has been initially completed, but the feature macro `__cpp_deduction_guides` has not been updated." ftm: - - name: __cpp_lib_erase_if - value: 202002L + - name: __cpp_deduction_guides + value: 201907L - - desc: "Standard library header units" - paper: P1502 - lib: true + - desc: "Implicit move for more local objects and rvalue references" + paper: P1825 support: - GCC 11 - - MSVC 14.29 + - Clang 13 + - MSVC 14.24 + - Xcode 13.4.1 - - desc: "`pmr::polymorphic_allocator<>` as a vocabulary type" - paper: P0339 - lib: true + - desc: "`constexpr` container operations" + paper: P0784 support: - - GCC 9 - - Clang 16 + - GCC 10 + - Clang 10 - MSVC 14.28 - - Xcode 15 + - Xcode 12 ftm: - - name: __cpp_lib_polymorphic_allocator - value: 201902L + - name: __cpp_constexpr_dynamic_alloc + value: 201907L - - desc: "Target Vectorization Policies from Parallelism V2 TS to C++20 (`std::execution::unseq`)" - paper: P1001 + - desc: "`constexpr` `std::allocator` and related utilities" + paper: P0784 lib: true support: - - GCC 9 - - Clang 17 (hint) - - MSVC 14.28 - hints: - - target: Clang 17 - msg: "Not supported by Clang on macOS." + - GCC 10 + - Clang 12 + - MSVC 14.29 + - Xcode 13 ftm: - - name: __cpp_lib_execution - value: 201902L + - name: __cpp_lib_constexpr_dynamic_alloc + value: 201907L - - desc: "`std::lerp()` and `std::midpoint()`" - paper: P0811 + - desc: "Bit operations: `std::rotl()`, `rotr()`, `countl_zero()`, `countl_one()`, `countr_zero()`, `countr_one()`, `popcount()`" + paper: P0553 lib: true support: - GCC 9 - Clang 9 - - MSVC 14.23 + - MSVC 14.25 - MSVC 14.28 - Xcode 11.4 ftm: - - name: __cpp_lib_interpolate - value: 201902L + - name: __cpp_lib_bitops + value: 201907L - - desc: "Usability enhancements for `std::span`" - paper: P1024 + - desc: "`std::format()`" + paper: P0645 lib: true support: - - GCC 10 - - Clang 9 + - GCC 13 - Clang 14 - - MSVC 14.26 - - Xcode 11.4 + - Clang 17 + - MSVC 14.29 + - Xcode 15.3 + ftm: + - name: __cpp_lib_format + value: 201907L - - desc: "Make `filesystem::create_directory()` intuitive" - paper: P1164 + - desc: "Integration of chrono with text formatting" + paper: P1361 lib: true support: - - GCC 8.3 - - Clang 12 - - MSVC 14.20 - - Xcode 13 + - GCC 13 + - Clang 21 + - MSVC 14.29 + - Xcode 26 - - desc: "`std::ssize()` and unsigned extent for `std::span`" - paper: P1227 + - desc: "Mathematical constants" + paper: P0631 lib: true support: - GCC 10 - - Clang 9 + - Clang 11 - MSVC 14.25 - - Xcode 11.4 + - Xcode 12.5 ftm: - - name: __cpp_lib_ssize - value: 201902L + - name: __cpp_lib_math_constants + value: 201907L - - desc: "Traits for (un)bounded arrays" - paper: P1357 + - desc: "Atomic waiting and notifying, `std::counting_semaphore`, `std::latch` and `std::barrier`" + paper: P1135 lib: true support: - - GCC 9 - - Clang 9 - - MSVC 14.25 - - Xcode 11.4 + - GCC 11 + - Clang 11 + - MSVC 14.28 + - Xcode 13.4.1 (hint) + hints: + - target: Xcode 13.4.1 + msg: "Minimum deployment target: macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0" ftm: - - name: __cpp_lib_bounded_array_traits - value: 201902L + - name: __cpp_lib_atomic_flag_test + value: 201907L + - name: __cpp_lib_atomic_lock_free_type_aliases + value: 201907L + - name: __cpp_lib_atomic_wait + value: 201907L + - name: __cpp_lib_barrier + value: 201907L + - name: __cpp_lib_latch + value: 201907L + - name: __cpp_lib_semaphore + value: 201907L + + - desc: "`std::atomic_ref::wait()`, `std::atomic_ref::notify_one()` and `std::atomic_ref::notify_all()`" + paper: P1643 + lib: true + support: + - GCC 11 + - Clang 19 + - Xcode 16.3 + - MSVC 14.28 + + - desc: "The Mothership has Landed: Adding `<=>` to the Library" + paper: P1614 + lib: true + support: + - GCC 10 + - Clang 19 + - MSVC 14.29 + - Xcode 16.3 - desc: "`std::to_array()`" paper: P0325 @@ -1485,104 +1568,60 @@ features: - MSVC 14.29 - Xcode 15 - - desc: "Layout-compatibility and pointer-interconvertibility traits" - paper: P0466 - lib: true - support: - - GCC 12 - - MSVC 14.29 - ftm: - - name: __cpp_lib_is_layout_compatible - value: 201907L - - name: __cpp_lib_is_pointer_interconvertible - value: 201907L - - - desc: "Bit operations: `std::rotl()`, `rotr()`, `countl_zero()`, `countl_one()`, `countr_zero()`, `countr_one()`, `popcount()`" - paper: P0553 + - desc: "`char8_t` backward compatibility remediation" + paper: P1423 lib: true support: - - GCC 9 - - Clang 9 - - MSVC 14.25 - - MSVC 14.28 - - Xcode 11.4 + - GCC 10 + - Clang 15 + - Xcode 14.3 + - MSVC 14.26 ftm: - - name: __cpp_lib_bitops + - name: __cpp_lib_char8_t value: 201907L - - desc: "Mathematical constants" - paper: P0631 + - desc: "Standard library header units" + paper: P1502 lib: true support: - - GCC 10 - - Clang 11 - - MSVC 14.25 - - Xcode 12.5 - ftm: - - name: __cpp_lib_math_constants - value: 201907L + - GCC 11 + - MSVC 14.29 - - desc: "`std::format()`" - paper: P0645 + - desc: "Output `chrono::day`s with 'd' suffix" + paper: P1650 lib: true support: - GCC 13 - - Clang 14 - - Clang 17 + - Clang 16 - MSVC 14.29 - - Xcode 15.3 - ftm: - - name: __cpp_lib_format - value: 201907L + - Xcode 15 - - desc: "`std::stop_token` and `std::jthread`" - paper: P0660 + - desc: "`constexpr` `std::invoke()` and related utilities" + paper: P1065 lib: true support: - GCC 10 - - Clang 17 (partial) - - Clang 20 - - MSVC 14.28 (hint) - - Xcode 16.4 (partial) - - Xcode 26 - hints: - - target: Clang 17 - msg: "Guarded behind compiler flag -fexperimental-library." - - target: MSVC 14.28 - msg: "MSVC 14.28 is available with VS 16.8 and VS 16.9. This feature is supported starting with VS 16.9, which is identifiable by checking _MSC_FULL_VER == 192829910." - - target: Xcode 16.4 - msg: "Guarded behind compiler flag -fexperimental-library." - ftm: - - name: __cpp_lib_jthread - value: 201911L + - Clang 12 + - MSVC 14.28 + - Xcode 13 - - desc: "`constexpr` `std::allocator` and related utilities" - paper: P0784 + - desc: "Input range adaptors" + paper: P1035 lib: true support: - GCC 10 - - Clang 12 + - Clang 16 - MSVC 14.29 - - Xcode 13 - ftm: - - name: __cpp_lib_constexpr_dynamic_alloc - value: 201907L + - Xcode 15 - - desc: "`constexpr` `std::string`" - paper: - - P0426 - - P1032 - - P0980 + - desc: "`ranges::basic_istream_view::iterator` should not be copyable" + paper: P1638 lib: true support: - - GCC 12 - - Clang 15 + - GCC 11 + - Clang 16 + - Xcode 15 - MSVC 14.29 - - MSVC 14.30 - - Xcode 14.3 - ftm: - - name: __cpp_lib_constexpr_string - value: 201907L - desc: "`constexpr` `std::vector`" paper: P1004 @@ -1597,61 +1636,39 @@ features: - name: __cpp_lib_constexpr_vector value: 201907L - - desc: "Input range adaptors" - paper: P1035 - lib: true - support: - - GCC 10 - - Clang 16 - - MSVC 14.29 - - Xcode 15 - - - desc: "`constexpr` `std::invoke()` and related utilities" - paper: P1065 + - desc: "`std::stop_token` and `std::jthread`" + paper: P0660 lib: true support: - GCC 10 - - Clang 12 - - MSVC 14.28 - - Xcode 13 + - Clang 17 (partial) + - Clang 20 + - MSVC 14.28 (hint) + - Xcode 16.4 (partial) + - Xcode 26 + hints: + - target: Clang 17 + msg: "Guarded behind compiler flag -fexperimental-library." + - target: MSVC 14.28 + msg: "MSVC 14.28 is available with VS 16.8 and VS 16.9. This feature is supported starting with VS 16.9, which is identifiable by checking _MSC_FULL_VER == 192829910." + - target: Xcode 16.4 + msg: "Guarded behind compiler flag -fexperimental-library." + ftm: + - name: __cpp_lib_jthread + value: 201911L - - desc: "Atomic waiting and notifying, `std::counting_semaphore`, `std::latch` and `std::barrier`" - paper: P1135 + - desc: "Layout-compatibility and pointer-interconvertibility traits" + paper: P0466 lib: true support: - - GCC 11 - - Clang 11 - - MSVC 14.28 - - Xcode 13.4.1 (hint) - hints: - - target: Xcode 13.4.1 - msg: "Minimum deployment target: macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0" + - GCC 12 + - MSVC 14.29 ftm: - - name: __cpp_lib_atomic_flag_test - value: 201907L - - name: __cpp_lib_atomic_lock_free_type_aliases - value: 201907L - - name: __cpp_lib_atomic_wait - value: 201907L - - name: __cpp_lib_barrier - value: 201907L - - name: __cpp_lib_latch + - name: __cpp_lib_is_layout_compatible value: 201907L - - name: __cpp_lib_semaphore + - name: __cpp_lib_is_pointer_interconvertible value: 201907L - - desc: "Add `max()` to latch and barrier" - paper: P1865 - lib: true - support: - - GCC 11 - - Clang 11 - - MSVC 14.28 - - Xcode (hint) - hints: - - target: Xcode - msg: "Minimum deployment target: macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0" - - desc: "`std::source_location`" paper: P1208 lib: true @@ -1664,23 +1681,55 @@ features: - name: __cpp_lib_source_location value: 201907L - - desc: "The Mothership has Landed: Adding `<=>` to the Library" - paper: P1614 + - desc: "Allow defaulting comparisons by value" + paper: P1946 + support: + - GCC 10 + - Clang 10 + - MSVC 14.25 + - Xcode 12 + + - desc: "Inconsistencies with constant template parameters" + paper: P1907 + support: + - GCC 10 (partial) + - GCC 11 + - Clang 18 (partial) + - MSVC 14.26 + - Xcode 13.4.1 (partial) + ftm: + - name: __cpp_nontype_template_args + value: 201911L + + - desc: "Concept traits should be named after concepts" + paper: P1871 lib: true support: - GCC 10 - - Clang 19 - - MSVC 14.29 - - Xcode 16.3 + - Clang 14 + - Xcode + - MSVC 14.27 - - desc: "Integration of chrono with text formatting" - paper: P1361 + - desc: "Ranges adaptors for non-copyable iterators" + paper: P1862 lib: true support: - - GCC 13 - - Clang 21 + - GCC 10 + - Clang 16 + - Xcode 15 - MSVC 14.29 - - Xcode 26 + + - desc: "Add `max()` to latch and barrier" + paper: P1865 + lib: true + support: + - GCC 11 + - Clang 11 + - MSVC 14.28 + - Xcode (hint) + hints: + - target: Xcode + msg: "Minimum deployment target: macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0" - desc: "`constexpr` default constructor of `std::atomic` and `std::atomic_flag`" paper: P0883 @@ -1694,6 +1743,14 @@ features: - name: __cpp_lib_atomic_value_initialization value: 201911L + - desc: "Remove `std::weak_equality` and `std::strong_equality`" + paper: P1959 + support: + - GCC 10 + - Clang 10 + - MSVC 14.25 + - Xcode 12 + - desc: "`constexpr` for numeric algorithms" paper: P1645 lib: true @@ -1706,71 +1763,28 @@ features: - name: __cpp_lib_constexpr_numeric value: 201911L - - desc: "Safe integral comparisons" - paper: P0586 - lib: true - support: - - GCC 10 - - Clang 13 - - MSVC 14.27 - - Xcode 13.4.1 - ftm: - - name: __cpp_lib_integer_comparison_functions - value: 202002L - - - desc: "Reviewing deprecated facilities of C++17 for C++20" - paper: P0619 - lib: true - support: - - GCC 12 - - MSVC 14.26 - - Clang 20 (hint) - - Xcode 26 - hints: - - target: Clang 20 - msg: "Removed headers are still provided as an extension, but with deprecation warnings." - - - desc: "Symmetry for spaceship" - paper: P0905 - lib: true - support: - - GCC 10 - - Clang 7 - - Xcode 16.3 - - MSVC - ftm: - - name: __cpp_impl_three_way_comparison - value: 201711L - - - desc: "`std::atomic_ref::wait()`, `std::atomic_ref::notify_one()` and `std::atomic_ref::notify_all()`" - paper: P1643 - lib: true + - desc: "Pseudo-destructors end object lifetimes" + paper: P0593 support: - GCC 11 - - Clang 19 - - Xcode 16.3 - - MSVC 14.28 + - Clang 11 + - MSVC + - Xcode 12.5 - - desc: "`ranges::basic_istream_view::iterator` should not be copyable" - paper: P1638 - lib: true + - desc: "Converting from `T*` to `bool` should be considered narrowing" + paper: P1957 support: + - GCC 10 (hint) - GCC 11 - - Clang 16 - - Xcode 15 - - MSVC 14.29 - - - desc: "Output `chrono::day`s with 'd' suffix" - paper: P1650 - lib: true - support: - - GCC 13 - - Clang 16 - - MSVC 14.29 - - Xcode 15 + - Clang 18 + - MSVC 14.27 + - Xcode 13 + hints: + - target: GCC 10 + msg: "In C++20 mode only. (`-std=c++20`)" - - desc: "Ranges adaptors for non-copyable iterators" - paper: P1862 + - desc: "`ranges::elements_view` needs its own sentinel" + paper: P1994 lib: true support: - GCC 10 @@ -1778,44 +1792,30 @@ features: - Xcode 15 - MSVC 14.29 - - desc: "`ranges::elements_view` needs its own sentinel" - paper: P1994 + - desc: "Safe integral comparisons" + paper: P0586 lib: true support: - GCC 10 - - Clang 16 - - Xcode 15 - - MSVC 14.29 + - Clang 13 + - MSVC 14.27 + - Xcode 13.4.1 + ftm: + - name: __cpp_lib_integer_comparison_functions + value: 202002L - - desc: "`char8_t` backward compatibility remediation" - paper: P1423 + - desc: "`constexpr` `std::string`" + paper: + - P0426 + - P1032 + - P0980 lib: true support: - - GCC 10 + - GCC 12 - Clang 15 + - MSVC 14.29 + - MSVC 14.30 - Xcode 14.3 - - MSVC 14.26 ftm: - - name: __cpp_lib_char8_t + - name: __cpp_lib_constexpr_string value: 201907L - - - desc: "Concept traits should be named after concepts" - paper: P1871 - lib: true - support: - - GCC 10 - - Clang 14 - - Xcode - - MSVC 14.27 - - - desc: "Converting from `T*` to `bool` should be considered narrowing" - paper: P1957 - support: - - GCC 10 (hint) - - GCC 11 - - Clang 18 - - MSVC 14.27 - - Xcode 13 - hints: - - target: GCC 10 - msg: "In C++20 mode only. (`-std=c++20`)" diff --git a/features_cpp23.yaml b/features_cpp23.yaml index 4130fc0..a8b2be1 100644 --- a/features_cpp23.yaml +++ b/features_cpp23.yaml @@ -13,6 +13,57 @@ features: value: 202011L content: literal-suffix-size-t.md + - desc: "`std::basic_string::contains()` and `std::basic_string_view::contains()`" + paper: P1679 + lib: true + support: + - GCC 11 + - Clang 12 + - MSVC 14.30 + - Xcode 13 + ftm: + - name: __cpp_lib_string_contains + value: 202011L + + - desc: "``" + paper: P0881 + content: stacktrace.md + lib: true + support: + - GCC 12 (partial) + - GCC 14 + - MSVC 14.34 + hints: + - target: GCC 12 + msg: "Enabled by building GCC with `--enable-libstdcxx-backtrace=yes`, requires linking against `-lstdc++_libbacktrace`" + ftm: + - name: __cpp_lib_stacktrace + value: 202011L + + - desc: "`std::is_scoped_enum`" + paper: P1048 + lib: true + support: + - GCC 11 + - Clang 12 + - MSVC 14.30 + - Xcode 13 + ftm: + - name: __cpp_lib_is_scoped_enum + value: 202011L + + - desc: "``" + paper: P0943 + lib: true + support: + - GCC 12 + - Clang 15 + - MSVC 14.31 + - Xcode 14.3 + ftm: + - name: __cpp_lib_stdatomic_h + value: 202011L + - desc: "_Down with ()!_ (relax `()` rules for lambdas)" paper: P1102 summary: "Empty parameter parentheses can be omitted from lambdas with specifiers." @@ -22,6 +73,60 @@ features: - MSVC 14.44 - Xcode 13.4.1 + - desc: "Repairing input range adaptors and `std::counted_iterator`" + paper: P2259 + lib: true + support: + - GCC 12 + - MSVC 14.30 (partial) + - MSVC 14.31 + hints: + - target: MSVC 14.30 + msg: "The counted_iterator part is implemented; the input range adaptors part is not implemented yet." + + - desc: "Relaxing requirements for `chrono::time_point::clock`" + paper: P2212 + lib: true + support: + - MSVC + - GCC 11 + - Clang 17 + - Xcode 16.1 + + - desc: "`std::visit()` for classes derived from `std::variant`" + paper: P2162 + lib: true + support: + - GCC 11.3 + - Clang 13 + - MSVC 14.20 + - MSVC 14.30 + - Xcode 16.1 + ftm: + - name: __cpp_lib_variant + value: 202102L + + - desc: "Conditionally borrowed ranges" + paper: P2017 + lib: true + support: + - GCC 11 + - Clang 16 + - MSVC 14.30 + - Xcode 16.1 + + - desc: "`std::to_underlying()`" + paper: P1682 + lib: true + support: + - GCC 11 + - Clang 13 + - MSVC 14.30 + - Xcode 13.4.1 + ftm: + - name: __cpp_lib_to_underlying + value: 202102L + - desc: "`if consteval`" paper: P1938 summary: "Detect at compile time whether code is being constant-evaluated." @@ -48,6 +153,31 @@ features: - target: Xcode msg: "Not applicable to Xcode / Apple Clang." + - desc: "Remove garbage collection and reachability-based leak detection (library support)" + paper: P2186 + lib: true + support: + - GCC 12 + - Clang 14 + - MSVC 14.30 + - Xcode 14.3 + + - desc: "C++ identifier syntax using Unicode Standard Annex 31" + paper: P1949 + support: + - GCC 12 + - Clang 14 + - Xcode 14 + - MSVC 14.50 + + - desc: "Allow duplicate attributes" + paper: P2156 + support: + - GCC 11 + - Clang 13 + - Xcode 13.4.1 + - MSVC 14.50 + - desc: "Narrowing contextual conversions to `bool` (in `static_assert` and `constexpr if`)" paper: P1401 support: @@ -87,581 +217,394 @@ features: - MSVC 14.44 - Xcode - - desc: "Explicit object member functions (deducing `this`)" - paper: P0847 - summary: 'Member functions can now have an explicit "self" parameter, enabling perfect forwarding and CRTP simplification.' - content: deducing-this.md + - desc: "`std::out_ptr()` and `std::inout_ptr()`" + paper: P1132 + lib: true support: - GCC 14 - - Clang 18 - Clang 19 - - MSVC 14.32 - - MSVC 14.43 - - Xcode 16.3 + - MSVC 14.30 + - Xcode 16.4 ftm: - - name: __cpp_explicit_this_parameter - value: 202110L + - name: __cpp_lib_out_ptr + value: 202106L - - desc: "Proposed resolution for [CWG2692](https://wg21.link/CWG2692) static and explicit object member functions with the same parameter-type-lists" - paper: P2797 + - desc: "`constexpr` `std::type_info::operator==()`" + paper: P1328 + lib: true support: - - GCC 14 - - Clang 19 - - MSVC 14.50 - - Xcode 16.3 + - GCC 12 + - Clang 17 + - MSVC 14.33 + - MSVC 14.34 + - Xcode 15 + ftm: + - name: __cpp_lib_constexpr_typeinfo + value: 202106L - - desc: "Decay-copy in the language (`auto(x)` and `auto{x}`)" - paper: P0849 - summary: "Create a decayed copy of an expression." + - desc: "``: stringstream with `std::span`-based buffer" + paper: P0448 + lib: true support: - GCC 12 - - Clang 15 - - MSVC 14.50 + - MSVC 14.31 + ftm: + - name: __cpp_lib_spanstream + value: 202106L + + - desc: "Iterator pair constructors for `std::stack` and `std::queue`" + paper: P1425 + lib: true + support: + - GCC 12 + - Clang 14 + - MSVC 14.31 - Xcode 14.3 ftm: - - name: __cpp_auto_cast - value: 202110L + - name: __cpp_lib_adaptor_iterator_pair_constructor + value: 202106L - - desc: "Add support for preprocessing directives `#elifdef` and `#elifndef`" - paper: P2334 - summary: "Shorthand preprocessor directives combining `#elif` and `#ifdef`/`#ifndef`." + - desc: "Non-deduction context for allocators in container deduction guides" + paper: P1518 + lib: true support: - GCC 12 - Clang 13 - - MSVC 14.40 + - MSVC 14.31 - Xcode 13.4.1 - - desc: "Non-literal variables (and labels and gotos) in `constexpr` functions" - paper: P2242 - summary: "constexpr functions can contain non-literal variables on non-evaluated paths." + - desc: "Providing size feedback in the Allocator interface" + paper: P0401 + lib: true support: - - GCC 12 - Clang 15 - - MSVC 14.43 + - MSVC 14.30 - Xcode 14.3 ftm: - - name: __cpp_constexpr - value: 202110L + - name: __cpp_lib_allocate_at_least + value: 202302L - - desc: "Consistent character literal encoding" - paper: P2316 + - desc: "`ranges::starts_with()` and `ranges::ends_with()`" + paper: P1659 + lib: true support: - - GCC - - Clang - - MSVC 14.30 - - Xcode + - GCC 16 + - Clang 17 (partial) + - Clang 19 + - MSVC 14.31 + - Xcode 16 + hints: + - target: Clang 17 + msg: "Implements `std::ranges::starts_with()` only." + ftm: + - name: __cpp_lib_ranges_starts_ends_with + value: 202106L - - desc: "Character sets and encodings" - paper: P2314 + - desc: "Default template arguments for `std::pair`'s forwarding constructor" + paper: P1951 + lib: true support: - - GCC 10 - - Clang - - Xcode + - GCC 14 + - Clang 14 + - MSVC 14.30 + - Xcode 14.3 - - desc: "Extend init-statement (of `for` loop) to allow alias-declaration" - paper: P2360 - summary: "Range-based for can declare type aliases in the init-statement." + - desc: "Range constructor for `std::basic_string_view`" + paper: P1989 + lib: true support: - - GCC 12 + - GCC 11 - Clang 14 - - MSVC 14.50 (hint) - - Xcode 14 - hints: - - target: MSVC 14.50 - msg: "Compiles, but no IntelliSense support yet." + - MSVC 14.30 + - Xcode 14.3 - - desc: "Multidimensional subscript operator (`operator[x, y]`)" - paper: P2128 - summary: "`operator[]` can now take multiple arguments." - content: multidim-subscript.md + - desc: "`std::invoke_r()`" + paper: P2136 + lib: true support: - GCC 12 - - Clang 15 - - MSVC 14.42 - - Xcode 14.3 + - Clang 17 + - MSVC 14.31 + - Xcode 15 ftm: - - name: __cpp_multidimensional_subscript - value: 202110L + - name: __cpp_lib_invoke_r + value: 202106L - - desc: "Attributes on lambdas" - paper: P2173 - summary: "Attributes can be applied to lambda expressions." + - desc: "Prohibiting `std::basic_string` and `std::basic_string_view` construction from `nullptr`" + paper: P2166 + lib: true support: - - GCC 9 + - GCC 12 - Clang 13 - - MSVC 14.44 + - MSVC 14.30 - Xcode 13.4.1 - - desc: "`#warning`" - paper: P2437 - summary: "Standard preprocessor directive to emit compiler warnings." - support: - - GCC 13 - - Clang - - MSVC 14.50 - - Xcode 15 - - - desc: "Remove non-encodable wide character literals and multicharacter wide character literals" - paper: P2362 - support: - - GCC 13 - - Clang 14 - - Xcode 15 - - - desc: "Labels at the end of compound statements" - paper: P2324 - summary: "Labels can appear at the end of blocks, without a following statement." - support: - - GCC 13 - - Clang 16 - - Xcode 16 - - - desc: "Delimited escape sequences" - paper: P2290 - summary: "New `\\x{...}`, `\\o{...}`, and `\\u{...}` syntax for escape sequences." - support: - - GCC 13 - - Clang 15 - - MSVC 14.50 - - Xcode 15 - - - desc: "Named universal character escapes" - paper: P2071 - summary: "Use Unicode character names in string literals." - support: - - GCC 13 - - Clang 15 - - Xcode 15 - ftm: - - name: __cpp_named_character_escapes - value: 202207L - - - desc: "Relaxing some `constexpr` restrictions" - paper: P2448 - summary: "Fewer requirements for constexpr functions." + - desc: "`constexpr` `std::optional` and `std::variant`" + paper: P2231 + lib: true support: - - GCC 13 + - GCC 11.3 (partial) + - GCC 12 + - Clang 13 (partial) - Clang 19 + - MSVC 14.31 + - Xcode 13.4.1 (partial) - Xcode 16.3 + hints: + - target: GCC 11.3 + msg: "Only the `std::optional` part is implemented." + - target: Clang 13 + msg: "Only the `std::optional` part is implemented." + - target: Xcode 13.4.1 + msg: "Only the `std::optional` part is implemented." ftm: - - name: __cpp_constexpr - value: 202207L - - - desc: "Simpler implicit move" - paper: P2266 - summary: "Simplified rules for when return statements implicitly move." - support: - - GCC 13 - - Clang 13 - - Xcode 26 - - MSVC 14.50 - ftm: - - name: __cpp_implicit_move - value: 202207L + - name: __cpp_lib_optional + value: 202106L + desc: "`constexpr` `std::optional` is available" + - name: __cpp_lib_variant + value: 202106L + desc: "`constexpr` `std::variant` is available" - - desc: "`static operator()` (static call operator)" - paper: P1169 - summary: "Call operators can now be static." - content: static-call-operator.md + - desc: "`std::format()` improvements" + paper: P2216 + lib: true support: - GCC 13 - - Clang 16 - - MSVC 14.44 - - Xcode 16 - ftm: - - name: __cpp_static_call_operator - value: 202207L + - Clang 15 + - MSVC 14.32 + - Xcode 14.3 - - desc: "Requirements for optional extended floating-point types" - paper: P1467 + - desc: "Range adaptor objects bind arguments by value" + paper: P2281 + lib: true support: - - GCC 13 - - MSVC (hint) + - GCC 11 + - Clang 14 + - MSVC 14.29 (partial) + - MSVC 14.31 + - Xcode 14.3 hints: - - target: MSVC - msg: "Not applicable to MSVC." - - - desc: "Class template argument deduction from inherited constructors" - paper: P2582 - summary: "Class template argument deduction works with inherited constructors." - support: - - GCC 14 - - - desc: "Attribute `[[assume]]`" - paper: P1774 - summary: "Tell the compiler that a condition is always true." - support: - - GCC 13 - - Clang 19 - - Xcode 16.3 + - target: MSVC 14.29 + msg: "The split_view part is missing." - - desc: "Support for UTF-8 as a portable source file encoding" - paper: P2295 + - desc: "`views::join()` should join all views of ranges" + paper: P2328 + lib: true support: - - GCC 13 + - GCC 11.2 - Clang 15 - - MSVC 14.0 - - Xcode 15 - - - desc: "`static operator[]`" - paper: P2589 - content: static-subscript-operator.md - support: - - GCC 13 - - Clang 16 - - MSVC 14.44 - - Xcode 16 - ftm: - - name: __cpp_multidimensional_subscript - value: 202211L + - MSVC 14.30 + - Xcode 14.3 - - desc: "Permitting static `constexpr` variables in `constexpr` functions" - paper: P2647 + - desc: "Views should not be required to be default-constructible" + paper: P2325 + lib: true support: - - GCC 13 + - GCC 11.3 - Clang 16 - - Xcode 16 - ftm: - - name: __cpp_constexpr - value: 202211L - - - desc: "Extending the lifetime of temporaries in range-based `for` loop initializer" - paper: - - P2644 - - P2718 - support: - - GCC 15 - - Clang 19 - - Xcode 16.3 - ftm: - - name: __cpp_range_based_for - value: 202211L - keywords: ["safety"] - - - desc: "Declarations and where to find them" - paper: P1787 - support: - - MSVC - - - desc: "Change scope of lambda trailing-return-type" - paper: - - P2036 - - P2579 - support: - - GCC 16 - - Clang 17 - - Xcode 16.3 - - MSVC 14.50 - - - desc: "Meaningful exports" - paper: P2615 - support: - - GCC 15 - - Clang 17 - - MSVC 14.28 - - - desc: "`consteval` needs to propagate up" - paper: P2564 - summary: "consteval calls in default arguments work correctly." - support: - - GCC 14 - - Clang 17 - - Xcode 16 - ftm: - - name: __cpp_consteval - value: 202211L - - - desc: "C++ identifier syntax using Unicode Standard Annex 31" - paper: P1949 - support: - - GCC 12 - - Clang 14 - - Xcode 14 - - MSVC 14.50 - - - desc: "Allow duplicate attributes" - paper: P2156 - support: - - GCC 11 - - Clang 13 - - Xcode 13.4.1 - - MSVC 14.50 - - - desc: "Adjusting the value of feature-test macro `__cpp_concepts`" - paper: P2493 - support: - - GCC 12 - - Clang 19 - - MSVC 14.50 - - Xcode 16.4 - - - desc: "Relax requirements on `wchar_t` to match existing practices" - paper: P2460 - support: - - GCC - - Clang - - MSVC 14.44 + - MSVC 14.30 - Xcode 15 - - - desc: "Using unknown pointers and references in constant expressions" - paper: P2280 - support: - - GCC 14 - - Clang 20 - - MSVC 14.50 - keywords: ["constexpr"] - - - desc: "The equality operator you are looking for" - paper: P2468 - support: - - GCC 13 - - Clang 16 - - Xcode 16 - - MSVC 14.36 - - - desc: "`char8_t` compatibility and portability fix" - paper: P2513 - content: char8-t-compatibility.md - support: - - GCC 13 - - Clang 16 - - MSVC 14.34 - - Xcode 16 - ftm: - - name: __cpp_char8_t - value: 202207L - - - desc: "``" - paper: P0881 - content: stacktrace.md - lib: true - support: - - GCC 12 (partial) - - GCC 14 - - MSVC 14.34 - hints: - - target: GCC 12 - msg: "Enabled by building GCC with `--enable-libstdcxx-backtrace=yes`, requires linking against `-lstdc++_libbacktrace`" ftm: - - name: __cpp_lib_stacktrace - value: 202011L + - name: __cpp_lib_ranges + value: 202106L - - desc: "Add a `pmr` alias for `std::stacktrace`" - paper: P2301 + - desc: "Superior string splitting (`views::lazy_split()` and redesigned `views::split()`)" + paper: P2210 lib: true support: - - GCC 12 (partial) - - GCC 14 - - MSVC 14.34 - hints: - - target: GCC 12 - msg: "Enabled by building GCC with `--enable-libstdcxx-backtrace=yes`, requires linking against `-lstdc++_libbacktrace`" - ftm: - - name: __cpp_lib_stacktrace - value: 202011L + - GCC 12 + - Clang 16 + - MSVC 14.31 + - Xcode 15 - - desc: "``" - paper: P0943 - lib: true + - desc: "Non-literal variables (and labels and gotos) in `constexpr` functions" + paper: P2242 + summary: "constexpr functions can contain non-literal variables on non-evaluated paths." support: - GCC 12 - Clang 15 - - MSVC 14.31 + - MSVC 14.43 - Xcode 14.3 ftm: - - name: __cpp_lib_stdatomic_h - value: 202011L + - name: __cpp_constexpr + value: 202110L - - desc: "`std::is_scoped_enum`" - paper: P1048 - lib: true + - desc: "Explicit object member functions (deducing `this`)" + paper: P0847 + summary: 'Member functions can now have an explicit "self" parameter, enabling perfect forwarding and CRTP simplification.' + content: deducing-this.md support: - - GCC 11 - - Clang 12 - - MSVC 14.30 - - Xcode 13 + - GCC 14 + - Clang 18 + - Clang 19 + - MSVC 14.32 + - MSVC 14.43 + - Xcode 16.3 ftm: - - name: __cpp_lib_is_scoped_enum - value: 202011L - - - desc: "`std::basic_string::contains()` and `std::basic_string_view::contains()`" - paper: P1679 - lib: true + - name: __cpp_explicit_this_parameter + value: 202110L + + - desc: "Consistent character literal encoding" + paper: P2316 support: - - GCC 11 - - Clang 12 + - GCC + - Clang - MSVC 14.30 - - Xcode 13 - ftm: - - name: __cpp_lib_string_contains - value: 202011L + - Xcode - - desc: "`std::to_underlying()`" - paper: P1682 - lib: true + - desc: "Add support for preprocessing directives `#elifdef` and `#elifndef`" + paper: P2334 + summary: "Shorthand preprocessor directives combining `#elif` and `#ifdef`/`#ifndef`." support: - - GCC 11 + - GCC 12 - Clang 13 - - MSVC 14.30 + - MSVC 14.40 - Xcode 13.4.1 - ftm: - - name: __cpp_lib_to_underlying - value: 202102L - - desc: "Relaxing requirements for `chrono::time_point::clock`" - paper: P2212 - lib: true + - desc: "Extend init-statement (of `for` loop) to allow alias-declaration" + paper: P2360 + summary: "Range-based for can declare type aliases in the init-statement." support: - - MSVC - - GCC 11 + - GCC 12 + - Clang 14 + - MSVC 14.50 (hint) + - Xcode 14 + hints: + - target: MSVC 14.50 + msg: "Compiles, but no IntelliSense support yet." + + - desc: "Change scope of lambda trailing-return-type" + paper: + - P2036 + - P2579 + support: + - GCC 16 - Clang 17 - - Xcode 16.1 + - Xcode 16.3 + - MSVC 14.50 - - desc: "Providing size feedback in the Allocator interface" - paper: P0401 - lib: true + - desc: "Multidimensional subscript operator (`operator[x, y]`)" + paper: P2128 + summary: "`operator[]` can now take multiple arguments." + content: multidim-subscript.md support: + - GCC 12 - Clang 15 - - MSVC 14.30 + - MSVC 14.42 - Xcode 14.3 ftm: - - name: __cpp_lib_allocate_at_least - value: 202302L + - name: __cpp_multidimensional_subscript + value: 202110L - - desc: "``: stringstream with `std::span`-based buffer" - paper: P0448 - lib: true + - desc: "Character sets and encodings" + paper: P2314 support: - - GCC 12 - - MSVC 14.31 - ftm: - - name: __cpp_lib_spanstream - value: 202106L + - GCC 10 + - Clang + - Xcode - - desc: "`std::out_ptr()` and `std::inout_ptr()`" - paper: P1132 + - desc: "Fixing locale handling in chrono formatters" + paper: P2372 lib: true support: - - GCC 14 - - Clang 19 - - MSVC 14.30 - - Xcode 16.4 - ftm: - - name: __cpp_lib_out_ptr - value: 202106L + - GCC 13 + - Clang 21 + - MSVC 14.31 + - Xcode 16.1 - - desc: "`constexpr` `std::type_info::operator==()`" - paper: P1328 + - desc: "What is a view?" + paper: P2415 lib: true support: - GCC 12 - - Clang 17 - - MSVC 14.33 - - MSVC 14.34 - - Xcode 15 - ftm: - - name: __cpp_lib_constexpr_typeinfo - value: 202106L + - Clang 14 + - MSVC 14.31 + - Xcode 14.3 - - desc: "Iterator pair constructors for `std::stack` and `std::queue`" - paper: P1425 + - desc: "Add support for `std::generator`-like types to `std::format()`" + paper: P2418 lib: true support: - - GCC 12 - - Clang 14 - - MSVC 14.31 + - GCC 13 + - Clang 15 + - MSVC 14.32 - Xcode 14.3 - ftm: - - name: __cpp_lib_adaptor_iterator_pair_constructor - value: 202106L - - desc: "Non-deduction context for allocators in container deduction guides" - paper: P1518 + - desc: "Fix `ranges::istream_view`" + paper: P2432 lib: true support: - GCC 12 - - Clang 13 + - Clang 16 - MSVC 14.31 - - Xcode 13.4.1 + - Xcode 15 - - desc: "`ranges::starts_with()` and `ranges::ends_with()`" - paper: P1659 + - desc: "`std::move_only_function`" + paper: P0288 lib: true support: - - GCC 16 - - Clang 17 (partial) - - Clang 19 - - MSVC 14.31 - - Xcode 16 - hints: - - target: Clang 17 - msg: "Implements `std::ranges::starts_with()` only." + - GCC 12 + - Clang 17 + - MSVC 14.32 ftm: - - name: __cpp_lib_ranges_starts_ends_with - value: 202106L + - name: __cpp_lib_move_only_function + value: 202110L - - desc: "Prohibiting `std::basic_string` and `std::basic_string_view` construction from `nullptr`" - paper: P2166 + - desc: "Monadic operations for `std::optional` (`and_then()`, `or_else()`, `transform()`)" + paper: P0798 lib: true support: - GCC 12 - - Clang 13 - - MSVC 14.30 - - Xcode 13.4.1 + - Clang 14 + - MSVC 14.32 + - Xcode 14.3 + ftm: + - name: __cpp_lib_optional + value: 202110L - - desc: "`std::invoke_r()`" - paper: P2136 - lib: true + - desc: "Decay-copy in the language (`auto(x)` and `auto{x}`)" + paper: P0849 + summary: "Create a decayed copy of an expression." support: - GCC 12 - - Clang 17 - - MSVC 14.31 - - Xcode 15 + - Clang 15 + - MSVC 14.50 + - Xcode 14.3 ftm: - - name: __cpp_lib_invoke_r - value: 202106L + - name: __cpp_auto_cast + value: 202110L - - desc: "Range constructor for `std::basic_string_view`" - paper: P1989 + - desc: "`std::basic_string::resize_and_overwrite()`" + paper: P1072 lib: true support: - - GCC 11 + - GCC 12 - Clang 14 - - MSVC 14.30 + - MSVC 14.31 - Xcode 14.3 + ftm: + - name: __cpp_lib_string_resize_and_overwrite + value: 202110L - - desc: "Default template arguments for `std::pair`'s forwarding constructor" - paper: P1951 + - desc: "Printing volatile `T*`" + paper: P1147 lib: true support: - - GCC 14 + - GCC 11.3 - Clang 14 - - MSVC 14.30 + - MSVC 14.31 - Xcode 14.3 - - desc: "Remove garbage collection and reachability-based leak detection (library support)" - paper: P2186 + - desc: "`std::byteswap()`" + paper: P1272 lib: true support: - GCC 12 - Clang 14 - - MSVC 14.30 - - Xcode 14.3 - - - desc: "zip: `views::zip()`, `views::zip_transform()`, `views::adjacent()` and `views::adjacent_transform()`" - paper: P2321 - lib: true - support: - - GCC 13 - - Clang 15 (partial) - - Clang 22 - - MSVC 14.37 + - MSVC 14.31 - Xcode 14.3 - hints: - - target: Clang 15 - msg: "Only implements tuple specializations and `views::zip()`." ftm: - - name: __cpp_lib_ranges_zip + - name: __cpp_lib_byteswap value: 202110L - desc: "Heterogeneous erasure overloads for associative containers" @@ -674,61 +617,59 @@ features: value: 202110L keywords: ["erase"] - - desc: "`std::byteswap()`" - paper: P1272 + - desc: "Require `std::span` and `std::basic_string_view` to be [TriviallyCopyable](https://en.cppreference.com/w/cpp/named_req/TriviallyCopyable)" + paper: P2251 lib: true support: - - GCC 12 - - Clang 14 + - GCC + - Clang - MSVC 14.31 - - Xcode 14.3 - ftm: - - name: __cpp_lib_byteswap - value: 202110L + - Xcode - - desc: "Printing volatile `T*`" - paper: P1147 + - desc: "Add a `pmr` alias for `std::stacktrace`" + paper: P2301 lib: true support: - - GCC 11.3 - - Clang 14 - - MSVC 14.31 - - Xcode 14.3 + - GCC 12 (partial) + - GCC 14 + - MSVC 14.34 + hints: + - target: GCC 12 + msg: "Enabled by building GCC with `--enable-libstdcxx-backtrace=yes`, requires linking against `-lstdc++_libbacktrace`" + ftm: + - name: __cpp_lib_stacktrace + value: 202011L - - desc: "`std::basic_string::resize_and_overwrite()`" - paper: P1072 + - desc: "zip: `views::zip()`, `views::zip_transform()`, `views::adjacent()` and `views::adjacent_transform()`" + paper: P2321 lib: true support: - - GCC 12 - - Clang 14 - - MSVC 14.31 + - GCC 13 + - Clang 15 (partial) + - Clang 22 + - MSVC 14.37 - Xcode 14.3 + hints: + - target: Clang 15 + msg: "Only implements tuple specializations and `views::zip()`." ftm: - - name: __cpp_lib_string_resize_and_overwrite + - name: __cpp_lib_ranges_zip value: 202110L - - desc: "Monadic operations for `std::optional` (`and_then()`, `or_else()`, `transform()`)" - paper: P0798 + - desc: 'Clarifying the status of the "C headers"' + paper: P2340 lib: true support: - - GCC 12 - - Clang 14 - - MSVC 14.32 - - Xcode 14.3 - ftm: - - name: __cpp_lib_optional - value: 202110L + - GCC + - Clang + - MSVC + - Xcode - - desc: "`std::move_only_function`" - paper: P0288 + - desc: "Cleaning up integer-class types" + paper: P2393 lib: true support: - - GCC 12 - - Clang 17 - MSVC 14.32 - ftm: - - name: __cpp_lib_move_only_function - value: 202110L - desc: "Add a conditional `noexcept` specification to `std::exchange()`" paper: P2401 @@ -739,23 +680,14 @@ features: - MSVC 14.31 - Xcode 14.3 - - desc: "Require `std::span` and `std::basic_string_view` to be [TriviallyCopyable](https://en.cppreference.com/w/cpp/named_req/TriviallyCopyable)" - paper: P2251 - lib: true - support: - - GCC - - Clang - - MSVC 14.31 - - Xcode - - - desc: 'Clarifying the status of the "C headers"' - paper: P2340 - lib: true + - desc: "Attributes on lambdas" + paper: P2173 + summary: "Attributes can be applied to lambda expressions." support: - - GCC - - Clang - - MSVC - - Xcode + - GCC 9 + - Clang 13 + - MSVC 14.44 + - Xcode 13.4.1 - desc: "`std::expected` (``)" paper: @@ -791,6 +723,22 @@ features: - name: __cpp_lib_unreachable value: 202202L + - desc: "Conversions from ranges to containers (`ranges::to()`)" + paper: P1206 + content: ranges-to.md + lib: true + support: + - GCC 14 (partial) + - GCC 15 + - Clang 17 + - MSVC 14.34 + - Xcode 15 + ftm: + - name: __cpp_lib_containers_ranges + value: 202202L + - name: __cpp_lib_ranges_to_container + value: 202202L + - desc: "Deprecating `std::aligned_storage` and `std::aligned_union`" paper: P1413 lib: true @@ -832,22 +780,6 @@ features: - name: __cpp_lib_constexpr_memory value: 202202L - - desc: "Conversions from ranges to containers (`ranges::to()`)" - paper: P1206 - content: ranges-to.md - lib: true - support: - - GCC 14 (partial) - - GCC 15 - - Clang 17 - - MSVC 14.34 - - Xcode 15 - ftm: - - name: __cpp_lib_containers_ranges - value: 202202L - - name: __cpp_lib_ranges_to_container - value: 202202L - - desc: "Pipe support for user-defined range adaptors (`ranges::range_adaptor_closure` and `std::bind_back()`)" paper: P2387 lib: true @@ -919,6 +851,184 @@ features: - name: __cpp_lib_ranges_chunk_by value: 202202L + - desc: "The equality operator you are looking for" + paper: P2468 + support: + - GCC 13 + - Clang 16 + - Xcode 16 + - MSVC 14.36 + + - desc: "De-deprecating volatile compound operations." + paper: P2327 + lib: true + support: + - Xcode 15 + - MSVC 14.34 + + - desc: "`#warning`" + paper: P2437 + summary: "Standard preprocessor directive to emit compiler warnings." + support: + - GCC 13 + - Clang + - MSVC 14.50 + - Xcode 15 + + - desc: "Remove non-encodable wide character literals and multicharacter wide character literals" + paper: P2362 + support: + - GCC 13 + - Clang 14 + - Xcode 15 + + - desc: "Labels at the end of compound statements" + paper: P2324 + summary: "Labels can appear at the end of blocks, without a following statement." + support: + - GCC 13 + - Clang 16 + - Xcode 16 + + - desc: "Delimited escape sequences" + paper: P2290 + summary: "New `\\x{...}`, `\\o{...}`, and `\\u{...}` syntax for escape sequences." + support: + - GCC 13 + - Clang 15 + - MSVC 14.50 + - Xcode 15 + + - desc: "Relaxing some `constexpr` restrictions" + paper: P2448 + summary: "Fewer requirements for constexpr functions." + support: + - GCC 13 + - Clang 19 + - Xcode 16.3 + ftm: + - name: __cpp_constexpr + value: 202207L + + - desc: "Simpler implicit move" + paper: P2266 + summary: "Simplified rules for when return statements implicitly move." + support: + - GCC 13 + - Clang 13 + - Xcode 26 + - MSVC 14.50 + ftm: + - name: __cpp_implicit_move + value: 202207L + + - desc: "Named universal character escapes" + paper: P2071 + summary: "Use Unicode character names in string literals." + support: + - GCC 13 + - Clang 15 + - Xcode 15 + ftm: + - name: __cpp_named_character_escapes + value: 202207L + + - desc: "`static operator()` (static call operator)" + paper: P1169 + summary: "Call operators can now be static." + content: static-call-operator.md + support: + - GCC 13 + - Clang 16 + - MSVC 14.44 + - Xcode 16 + ftm: + - name: __cpp_static_call_operator + value: 202207L + + - desc: "Deduction guides update for `static operator()`" + paper: P1169 + lib: true + support: + - GCC 13 + - Clang 16 + - MSVC 14.39 + - Xcode 15 + + - desc: "Using unknown pointers and references in constant expressions" + paper: P2280 + support: + - GCC 14 + - Clang 20 + - MSVC 14.50 + keywords: ["constexpr"] + + - desc: "Requirements for optional extended floating-point types" + paper: P1467 + support: + - GCC 13 + - MSVC (hint) + hints: + - target: MSVC + msg: "Not applicable to MSVC." + + - desc: "Standard names and library support for extended floating-point types" + paper: P1467 + lib: true + support: + - GCC 13 + - MSVC 14.37 + + - desc: "Adjusting the value of feature-test macro `__cpp_concepts`" + paper: P2493 + support: + - GCC 12 + - Clang 19 + - MSVC 14.50 + - Xcode 16.4 + + - desc: "Class template argument deduction from inherited constructors" + paper: P2582 + summary: "Class template argument deduction works with inherited constructors." + support: + - GCC 14 + + - desc: "Attribute `[[assume]]`" + paper: P1774 + summary: "Tell the compiler that a condition is always true." + support: + - GCC 13 + - Clang 19 + - Xcode 16.3 + + - desc: "Support for UTF-8 as a portable source file encoding" + paper: P2295 + support: + - GCC 13 + - Clang 15 + - MSVC 14.0 + - Xcode 15 + + - desc: "`char8_t` compatibility and portability fix" + paper: P2513 + content: char8-t-compatibility.md + support: + - GCC 13 + - Clang 16 + - MSVC 14.34 + - Xcode 16 + ftm: + - name: __cpp_char8_t + value: 202207L + + - desc: "Relax requirements on `wchar_t` to match existing practices" + paper: P2460 + support: + - GCC + - Clang + - MSVC 14.44 + - Xcode 15 + - desc: "`std::mdspan`: a non-owning multidimensional array reference (``)" paper: - P0009 @@ -937,22 +1047,6 @@ features: - name: __cpp_lib_mdspan value: 202207L - - desc: "Referencing the Unicode Standard" - paper: P2736 - lib: true - support: - - GCC - - Clang - - Xcode - - MSVC 14.37 - - - desc: "De-deprecating volatile compound operations." - paper: P2327 - lib: true - support: - - Xcode 15 - - MSVC 14.34 - - desc: "`std::flat_map` (``)" paper: P0429 content: flat-map.md @@ -1004,6 +1098,28 @@ features: - name: __cpp_lib_ranges_stride value: 202207L + - desc: "Formatted output library (``)" + paper: + - P2093 + - P2539 + content: print.md + lib: true + support: + - GCC 14 + - Clang 17 (partial) + - Clang 18 + - MSVC 14.37 + - Xcode 15 (partial) + - Xcode 16 + hints: + - target: Clang 17 + msg: "Overloads for `std::ostream` are not implemented." + - target: Xcode 15 + msg: "Overloads for `std::ostream` are not implemented." + ftm: + - name: __cpp_lib_print + value: 202207L + - desc: "Compatibility between `std::tuple` and tuple-like objects" paper: P2165 lib: true @@ -1066,59 +1182,6 @@ features: - name: __cpp_lib_format_ranges value: 202207L - - desc: "Improve default container formatting" - paper: P2585 - lib: true - support: - - GCC 15 - - Clang 16 (partial) - - Clang 17 - - Xcode 15 - - MSVC 14.42 - hints: - - target: Clang 16 - msg: "Specializations for string and debug_string are not done." - ftm: - - name: __cpp_lib_format_ranges - value: 202207L - - - desc: "Formatted output library (``)" - paper: - - P2093 - - P2539 - content: print.md - lib: true - support: - - GCC 14 - - Clang 17 (partial) - - Clang 18 - - MSVC 14.37 - - Xcode 15 (partial) - - Xcode 16 - hints: - - target: Clang 17 - msg: "Overloads for `std::ostream` are not implemented." - - target: Xcode 15 - msg: "Overloads for `std::ostream` are not implemented." - ftm: - - name: __cpp_lib_print - value: 202207L - - - desc: "Formatting `std::thread::id` and `std::stacktrace`" - paper: P2693 - lib: true - support: - - GCC 14 - - Clang 17 (partial) - - MSVC 14.38 - - Xcode 15 - hints: - - target: Clang 17 - msg: "`std::stacktrace` is not implemented yet." - ftm: - - name: __cpp_lib_formatters - value: 202302L - - desc: "`constexpr` for integral overloads of `std::to_chars()` and `std::from_chars()`" paper: P2291 lib: true @@ -1208,6 +1271,16 @@ features: - name: __cpp_lib_constexpr_bitset value: 202207L + - desc: "Clarify handling of encodings in localized formatting of chrono types" + paper: P2419 + lib: true + support: + - GCC 15 + - MSVC 14.34 + ftm: + - name: __cpp_lib_format + value: 202207L + - desc: "`std::basic_string::substr()` `&&`" paper: P2438 lib: true @@ -1318,6 +1391,15 @@ features: - name: __cpp_lib_generator value: 202207L + - desc: "`std::basic_format_string`" + paper: P2508 + lib: true + support: + - GCC 13 + - Clang 15 + - MSVC 14.35 + - Xcode 14.3 + - desc: "Add a conditional `noexcept` specification to `std::apply()`" paper: P2517 lib: true @@ -1327,123 +1409,157 @@ features: - MSVC 14.34 - Xcode 16 - - desc: "Explicit lifetime management (`std::start_lifetime_as()`)" - paper: - - P2590 - - P2679 + - desc: "`std::move_iterator` should be a random access iterator" + paper: P2520 lib: true support: - - GCC 16 + - GCC 12.3 + - Clang 17 + - MSVC 14.34 + - Xcode 15 ftm: - - name: __cpp_lib_start_lifetime_as + - name: __cpp_lib_move_iterator_concept value: 202207L - - desc: "Clarify handling of encodings in localized formatting of chrono types" - paper: P2419 + - desc: "Improve default container formatting" + paper: P2585 lib: true support: - GCC 15 - - MSVC 14.34 + - Clang 16 (partial) + - Clang 17 + - Xcode 15 + - MSVC 14.42 + hints: + - target: Clang 16 + msg: "Specializations for string and debug_string are not done." ftm: - - name: __cpp_lib_format + - name: __cpp_lib_format_ranges value: 202207L - - desc: "`std::move_iterator` should be a random access iterator" - paper: P2520 + - desc: "Explicit lifetime management (`std::start_lifetime_as()`)" + paper: + - P2590 + - P2679 lib: true support: - - GCC 12.3 - - Clang 17 - - MSVC 14.34 - - Xcode 15 + - GCC 16 ftm: - - name: __cpp_lib_move_iterator_concept + - name: __cpp_lib_start_lifetime_as value: 202207L - - desc: "Deduction guides update for `static operator()`" - paper: P1169 - lib: true + - desc: "`static operator[]`" + paper: P2589 + content: static-subscript-operator.md support: - GCC 13 - Clang 16 - - MSVC 14.39 - - Xcode 15 + - MSVC 14.44 + - Xcode 16 + ftm: + - name: __cpp_multidimensional_subscript + value: 202211L - - desc: "Standard names and library support for extended floating-point types" - paper: P1467 - lib: true + - desc: "Permitting static `constexpr` variables in `constexpr` functions" + paper: P2647 support: - GCC 13 - - MSVC 14.37 + - Clang 16 + - Xcode 16 + ftm: + - name: __cpp_constexpr + value: 202211L - - desc: "Monadic operations for `std::expected` (`and_then()`, `or_else()`, `transform()`)" - paper: P2505 - lib: true + - desc: "`consteval` needs to propagate up" + paper: P2564 + summary: "consteval calls in default arguments work correctly." support: - - GCC 13 + - GCC 14 - Clang 17 - - MSVC 14.36 - - Xcode 15 + - Xcode 16 ftm: - - name: __cpp_lib_expected + - name: __cpp_consteval value: 202211L - - desc: "`views::enumerate()`" - paper: P2164 - content: enumerate.md - lib: true + - desc: "Meaningful exports" + paper: P2615 support: - - GCC 13 - - MSVC 14.37 + - GCC 15 + - Clang 17 + - MSVC 14.28 + + - desc: "Extending the lifetime of temporaries in range-based `for` loop initializer" + paper: + - P2644 + - P2718 + support: + - GCC 15 + - Clang 19 + - Xcode 16.3 ftm: - - name: __cpp_lib_ranges_enumerate - value: 202302L + - name: __cpp_range_based_for + value: 202211L + keywords: ["safety"] - - desc: "A trait for implicit lifetime types (`std::is_implicit_lifetime`)" - paper: P2674 + - desc: "Poison Pills are Too Toxic" + paper: P2602 lib: true support: - - GCC 16 - - Clang 20 - - MSVC 14.51 (partial) - - Xcode 26 - hints: - - target: MSVC 14.50 - msg: "Currently only supported by the STL in conjunction with Clang." + - GCC 14 + - Clang 19 + - MSVC 14.36 + - Xcode 16.3 ftm: - - name: __cpp_lib_is_implicit_lifetime - value: 202302L + - name: __cpp_lib_ranges + value: 202211L - - desc: "`std::common_reference_t` of `std::reference_wrapper` should be a reference type" - paper: P2655 + - desc: "Monadic operations for `std::expected` (`and_then()`, `or_else()`, `transform()`)" + paper: P2505 lib: true support: - - GCC 16 - - Clang 21 (hint) - - MSVC 14.37 - hints: - - target: Clang 21 - msg: "The feature is implemented as a defect report to C++20." + - GCC 13 + - Clang 17 + - MSVC 14.36 + - Xcode 15 ftm: - - name: __cpp_lib_common_reference - value: 202302L - - name: __cpp_lib_common_reference_wrapper - value: 202302L + - name: __cpp_lib_expected + value: 202211L - - desc: "Disallowing user specialization of `std::allocator_traits`" - paper: P2652 + - desc: "Referencing the Unicode Standard" + paper: P2736 lib: true support: + - GCC + - Clang + - Xcode + - MSVC 14.37 + + - desc: "Proposed resolution for [CWG2692](https://wg21.link/CWG2692) static and explicit object member functions with the same parameter-type-lists" + paper: P2797 + support: + - GCC 14 - Clang 19 + - MSVC 14.50 + - Xcode 16.3 + + - desc: "Stashing stashing iterators for proper flattening" + paper: P2770 + lib: true + support: + - GCC 14 + - Clang 21 - MSVC 14.37 - - desc: "Deprecating `std::numeric_limits::has_denorm`" - paper: P2614 + - desc: "`views::enumerate()`" + paper: P2164 + content: enumerate.md lib: true support: - - Clang 18 + - GCC 13 - MSVC 14.37 - - Xcode 16 + ftm: + - name: __cpp_lib_ranges_enumerate + value: 202302L - desc: "Making multi-param constructors of views explicit" paper: P2711 @@ -1472,204 +1588,83 @@ features: - name: __cpp_lib_ranges value: 202302L - - desc: "Stashing stashing iterators for proper flattening" - paper: P2770 + - desc: "Improving `std::format()`'s width estimation" + paper: P2675 lib: true support: - GCC 14 - - Clang 21 - - MSVC 14.37 - - - desc: "`std::visit()` for classes derived from `std::variant`" - paper: P2162 - lib: true - support: - - GCC 11.3 - - Clang 13 - - MSVC 14.20 - - MSVC 14.30 - - Xcode 16.1 - ftm: - - name: __cpp_lib_variant - value: 202102L - - - desc: "Conditionally borrowed ranges" - paper: P2017 - lib: true - support: - - GCC 11 - - Clang 16 - - MSVC 14.30 + - Clang 17 + - MSVC 14.38 - Xcode 16.1 - - desc: "Repairing input range adaptors and `std::counted_iterator`" - paper: P2259 - lib: true - support: - - GCC 12 - - MSVC 14.30 (partial) - - MSVC 14.31 - hints: - - target: MSVC 14.30 - msg: "The counted_iterator part is implemented; the input range adaptors part is not implemented yet." - - - desc: "`views::join()` should join all views of ranges" - paper: P2328 + - desc: "`std::format()` fill character allowances" + paper: P2572 lib: true support: - - GCC 11.2 - - Clang 15 - - MSVC 14.30 - - Xcode 14.3 + - GCC 14 + - Clang 17 + - MSVC 14.37 - - desc: "Views should not be required to be default-constructible" - paper: P2325 + - desc: "Formatting `std::thread::id` and `std::stacktrace`" + paper: P2693 lib: true support: - - GCC 11.3 - - Clang 16 - - MSVC 14.30 + - GCC 14 + - Clang 17 (partial) + - MSVC 14.38 - Xcode 15 + hints: + - target: Clang 17 + msg: "`std::stacktrace` is not implemented yet." ftm: - - name: __cpp_lib_ranges - value: 202106L + - name: __cpp_lib_formatters + value: 202302L - - desc: "Range adaptor objects bind arguments by value" - paper: P2281 + - desc: "A trait for implicit lifetime types (`std::is_implicit_lifetime`)" + paper: P2674 lib: true support: - - GCC 11 - - Clang 14 - - MSVC 14.29 (partial) - - MSVC 14.31 - - Xcode 14.3 + - GCC 16 + - Clang 20 + - MSVC 14.51 (partial) + - Xcode 26 hints: - - target: MSVC 14.29 - msg: "The split_view part is missing." + - target: MSVC 14.50 + msg: "Currently only supported by the STL in conjunction with Clang." + ftm: + - name: __cpp_lib_is_implicit_lifetime + value: 202302L - - desc: "`constexpr` `std::optional` and `std::variant`" - paper: P2231 + - desc: "`std::common_reference_t` of `std::reference_wrapper` should be a reference type" + paper: P2655 lib: true support: - - GCC 11.3 (partial) - - GCC 12 - - Clang 13 (partial) - - Clang 19 - - MSVC 14.31 - - Xcode 13.4.1 (partial) - - Xcode 16.3 + - GCC 16 + - Clang 21 (hint) + - MSVC 14.37 hints: - - target: GCC 11.3 - msg: "Only the `std::optional` part is implemented." - - target: Clang 13 - msg: "Only the `std::optional` part is implemented." - - target: Xcode 13.4.1 - msg: "Only the `std::optional` part is implemented." + - target: Clang 21 + msg: "The feature is implemented as a defect report to C++20." ftm: - - name: __cpp_lib_optional - value: 202106L - desc: "`constexpr` `std::optional` is available" - - name: __cpp_lib_variant - value: 202106L - desc: "`constexpr` `std::variant` is available" - - - desc: "Superior string splitting (`views::lazy_split()` and redesigned `views::split()`)" - paper: P2210 - lib: true - support: - - GCC 12 - - Clang 16 - - MSVC 14.31 - - Xcode 15 - - - desc: "Fix `ranges::istream_view`" - paper: P2432 - lib: true - support: - - GCC 12 - - Clang 16 - - MSVC 14.31 - - Xcode 15 - - - desc: "What is a view?" - paper: P2415 - lib: true - support: - - GCC 12 - - Clang 14 - - MSVC 14.31 - - Xcode 14.3 - - - desc: "Fixing locale handling in chrono formatters" - paper: P2372 - lib: true - support: - - GCC 13 - - Clang 21 - - MSVC 14.31 - - Xcode 16.1 - - - desc: "Cleaning up integer-class types" - paper: P2393 - lib: true - support: - - MSVC 14.32 - - - desc: "`std::format()` improvements" - paper: P2216 - lib: true - support: - - GCC 13 - - Clang 15 - - MSVC 14.32 - - Xcode 14.3 - - - desc: "Add support for `std::generator`-like types to `std::format()`" - paper: P2418 - lib: true - support: - - GCC 13 - - Clang 15 - - MSVC 14.32 - - Xcode 14.3 - - - desc: "`std::basic_format_string`" - paper: P2508 - lib: true - support: - - GCC 13 - - Clang 15 - - MSVC 14.35 - - Xcode 14.3 + - name: __cpp_lib_common_reference + value: 202302L + - name: __cpp_lib_common_reference_wrapper + value: 202302L - - desc: "Poison Pills are Too Toxic" - paper: P2602 + - desc: "Disallowing user specialization of `std::allocator_traits`" + paper: P2652 lib: true support: - - GCC 14 - Clang 19 - - MSVC 14.36 - - Xcode 16.3 - ftm: - - name: __cpp_lib_ranges - value: 202211L - - - desc: "`std::format()` fill character allowances" - paper: P2572 - lib: true - support: - - GCC 14 - - Clang 17 - MSVC 14.37 - - desc: "Improving `std::format()`'s width estimation" - paper: P2675 + - desc: "Deprecating `std::numeric_limits::has_denorm`" + paper: P2614 lib: true support: - - GCC 14 - - Clang 17 - - MSVC 14.38 - - Xcode 16.1 + - Clang 18 + - MSVC 14.37 + - Xcode 16 - desc: "`std::barrier`'s phase completion guarantees" paper: P2588 @@ -1683,3 +1678,8 @@ features: ftm: - name: __cpp_lib_barrier value: 202302L + + - desc: "Declarations and where to find them" + paper: P1787 + support: + - MSVC diff --git a/features_cpp26.yaml b/features_cpp26.yaml index eea8454..753317b 100644 --- a/features_cpp26.yaml +++ b/features_cpp26.yaml @@ -1,171 +1,36 @@ --- features: - - desc: "Reflection for C++26 (``)" - paper: P2996 - summary: "Reflection allows programs to inspect and manipulate their own structure at compile time. This is one of the most significant additions to C++26." - lib: true - support: - - GCC 16 (hint) - hints: - - target: GCC 16 - msg: "Requires `-freflection`" - ftm: - - name: __cpp_impl_reflection - value: 202506L - content: reflection.md - - - desc: "Annotations for Reflection" - paper: P3394 - support: - - GCC 16 - - - desc: "Splicing a base class subobject" - paper: P3293 - support: - - GCC 16 - keywords: ["reflection"] - - - desc: "`define_static_{string,object,array}`" - paper: P3491 - lib: true - support: - - GCC 16 - ftm: - - name: __cpp_lib_define_static - value: 202506L - keywords: ["reflection"] - - - desc: "Function Parameter Reflection in Reflection for C++26" - paper: P3096 - lib: true - support: - - GCC 16 - - - desc: "Expansion Statements (`template for`)" - paper: P1306 - summary: "`template for` iterates over compile-time ranges like tuples and reflection results." - support: - - GCC 16 - ftm: - - name: __cpp_expansion_statements - value: 202506L - keywords: ["reflection"] - - - desc: "Error Handling in Reflection" - paper: P3560 - lib: true - support: - - GCC 16 - ftm: - - name: __cpp_lib_reflection - value: 202506L - - - desc: "`constexpr` virtual inheritance" - paper: P3533 - content: constexpr-virtual-inheritance.md + - desc: "UB? In My Lexer? (Remove undefined behavior from lexing)" + paper: P2621 support: - - GCC 16 - ftm: - - name: __cpp_constexpr_virtual_inheritance - value: 202506L - - - desc: "Contracts for C++ (``)" - paper: P2900 - summary: "Contracts let you specify preconditions, postconditions, and assertions that document and enforce function requirements." - ftm: - - name: __cpp_contracts - value: 202502L - desc: "Core language feature" - - name: __cpp_lib_contracts - value: 202502L - desc: "Library API is available. This is a separate macro to allow for mixing language (compiler) support with different standard library implementations, where this macro specifies the level of support for contracts by that standard library implementation." - keywords: ["safety"] - content: contracts.md + - GCC + - Clang 3.3 + - Xcode 16 - - desc: "Standard library hardening" - paper: P3471 - lib: true + - desc: "Making non-encodable string literals ill-formed" + paper: P1854 support: - - GCC 15 (partial) - - Clang 18 (partial) - - MSVC 14.44 (partial) - - Xcode 16 (partial) - hints: - - target: GCC 15 - msg: "Calls `abort()` instead of using C++26 contracts when a hardened precondition is violated." - - target: Clang 18 - msg: "Calls `__builtin_expect(false, ...)` instead of using C++26 contracts when a hardened precondition is violated." - - target: MSVC 14.44 - msg: "Calls `__fastfail()` instead of using C++26 contracts when a hardened precondition is violated." - - target: Xcode 16 - msg: "Calls `__builtin_expect(false, ...)` instead of using C++26 contracts when a hardened precondition is violated." - ftm: - - name: __cpp_lib_hardened_array - desc: "Hardened `std::array`" - value: 202502L - - name: __cpp_lib_hardened_basic_string - desc: "Hardened `std::basic_string`" - value: 202502L - - name: __cpp_lib_hardened_basic_string_view - desc: "Hardened `std::basic_string_view`" - value: 202502L - - name: __cpp_lib_hardened_bitset - desc: "Hardened `std::bitset`" - value: 202502L - - name: __cpp_lib_hardened_deque - desc: "Hardened `std::deque`" - value: 202502L - - name: __cpp_lib_hardened_expected - desc: "Hardened `std::expected`" - value: 202502L - - name: __cpp_lib_hardened_forward_list - desc: "Hardened `std::forward_list`" - value: 202502L - - name: __cpp_lib_hardened_inplace_vector - desc: "Hardened `std::inplace_vector`" - value: 202502L - - name: __cpp_lib_hardened_list - desc: "Hardened `std::list`" - value: 202502L - - name: __cpp_lib_hardened_mdspan - desc: "Hardened `std::mdspan`" - value: 202502L - - name: __cpp_lib_hardened_optional - desc: "Hardened `std::optional`" - value: 202502L - - name: __cpp_lib_hardened_span - desc: "Hardened `std::span`" - value: 202502L - - name: __cpp_lib_hardened_valarray - desc: "Hardened `std::valarray`" - value: 202502L - - name: __cpp_lib_hardened_vector - desc: "Hardened `std::vector`" - value: 202502L - keywords: ["safety"] - content: hardening.md + - GCC 14 + - Clang 14 + - Xcode 16 - - desc: "Minor additions to C++26 standard library hardening" - paper: P3697 - lib: true + - desc: "[Unevaluated strings](https://en.cppreference.com/w/cpp/language/string_literal.html#Unevaluated_strings)" + paper: P2361 support: - - MSVC 14.50 (partial) + - GCC 14 + - Clang 17 (partial) + - Clang 18 + - Xcode 16 hints: - - target: MSVC 14.50 - msg: Partial support only due to the lack of Contracts. Support starting with Visual Studio 2026 18.0 Preview 2. ([GitHub Issue](https://github.com/microsoft/STL/pull/5650)) - keywords: ["safety"] + - target: Clang 17 + msg: "Attributes arguments don't yet parse as unevaluated string literals." - - desc: "[Pack indexing](https://en.cppreference.com/w/cpp/language/pack_indexing.html)" - paper: P2662 - summary: "Pack indexing provides direct access to elements in a parameter pack using `...[N]` syntax." - content: pack-indexing.md + - desc: "Add @, $, and ` to the [basic character set](https://en.cppreference.com/w/cpp/language/charset.html#Basic_character_set)" + paper: P2558 support: - GCC 15 - - Clang 19 - - Xcode 16.3 - ftm: - - name: __cpp_pack_indexing - value: 202311L + - Clang + - Xcode 15 - desc: "`constexpr` cast from `void*`: towards `constexpr` type-erasure" paper: P2738 @@ -177,6 +42,13 @@ features: - name: __cpp_constexpr value: 202306L + - desc: "On the ignorability of standard attributes" + paper: P2552 + support: + - GCC 15 + - Clang + - Xcode 16.3 + - desc: "Static storage for braced initializers" paper: P2752 support: @@ -205,1473 +77,1601 @@ features: value: 202306L content: placeholder-variable.md - - desc: "`#embed` - a scannable, tooling-friendly binary resource inclusion mechanism" - paper: P1967 - summary: "`#embed` allows you to include binary files directly into your source code at compile time." + - desc: "Testing for success or failure of `` functions" + lib: true + paper: P2497 support: - - GCC 15 (hint) - - Clang 19 (hint) - - Xcode 16.3 (hint) - hints: - - target: GCC 15 - msg: > - Although this is a C++26 feature, this is available in GCC starting with C++20 (`-std=c++20`). - - - target: Clang 19 - msg: > - Supported as an extension.
- Use the flag `-Wno-c23-extensions` to suppress warnings related to `#embed`.
- Although this is a C++26 feature, this is available in Clang starting with C++20 (`-std=c++20`).
- Clang does not define the `__cpp_pp_embed` feature-testing macro yet. - - - target: Xcode 16.3 - msg: > - Supported as an extension.
- Use the flag `-Wno-c23-extensions` to suppress warnings related to `#embed`.
- Although this is a C++26 feature, this is available in Apple Clang starting with C++20 (`-std=c++20`).
- Apple Clang does not define the `__cpp_pp_embed` feature-testing macro yet. + - GCC 14 + - Clang 18 ftm: - - name: __cpp_pp_embed - value: 202502L - content: embed.md + - name: __cpp_lib_to_chars + value: 202306L - - desc: "On the ignorability of standard attributes" - paper: P2552 + - desc: "Hashing support for `chrono` value classes" + paper: P2592 + lib: true support: - - GCC 15 - - Clang - - Xcode 16.3 + - GCC 16 + - Clang 22 + ftm: + - name: __cpp_lib_chrono + value: 202306L - - desc: "Remove deprecated arithmetic conversion on enumerations" - paper: P2864 + - desc: "Arithmetic overloads of `std::to_string()` and `std::to_wstring()` use `std::format()`" + paper: P2587 + lib: true support: - GCC 14 - - Clang 18 - - Xcode 16.3 + ftm: + - name: __cpp_lib_to_string + value: 202306L - - desc: "UB? In My Lexer? (Remove undefined behavior from lexing)" - paper: P2621 + - desc: "`constexpr` stable sorting" + paper: P2562 + lib: true support: - - GCC - - Clang 3.3 - - Xcode 16 + - GCC 15 + - Clang 21 + ftm: + - name: __cpp_lib_constexpr_algorithms + value: 202306L - - desc: "Template parameter initialization" - paper: P2308 - support: - - GCC 9 - - Clang 18 - - Xcode 16.3 - - - desc: "Disallow binding a returned [glvalue](https://en.cppreference.com/w/cpp/language/value_category.html#glvalue) to a temporary" - paper: P2748 - support: - - GCC 14 - - Clang 19 - - Xcode 16.3 - - - desc: "Attributes for [structured bindings](https://en.cppreference.com/w/cpp/language/structured_binding.html)" - paper: P0609 - support: - - GCC 15 - - Clang 19 - - Xcode 16.3 + - desc: "Read-copy update (RCU) (``)" + paper: P2545 + summary: "RCU provides efficient concurrent reads with minimal synchronization." + lib: true ftm: - - name: __cpp_structured_bindings - value: 202403L + - name: __cpp_lib_rcu + value: 202306L - - desc: "Making non-encodable string literals ill-formed" - paper: P1854 - support: - - GCC 14 - - Clang 14 - - Xcode 16 + - desc: "Hazard pointers (``)" + paper: P2530 + summary: "Hazard pointers enable safe memory reclamation in lock-free data structures." + lib: true + ftm: + - name: __cpp_lib_hazard_pointer + value: 202306L - - desc: "[Unevaluated strings](https://en.cppreference.com/w/cpp/language/string_literal.html#Unevaluated_strings)" - paper: P2361 + - desc: "ADL-proof `std::projected`" + paper: P2538 + lib: true support: - GCC 14 - - Clang 17 (partial) - Clang 18 + - MSVC 14.38 - Xcode 16 - hints: - - target: Clang 17 - msg: "Attributes arguments don't yet parse as unevaluated string literals." - - - desc: "Add @, $, and ` to the [basic character set](https://en.cppreference.com/w/cpp/language/charset.html#Basic_character_set)" - paper: P2558 - support: - - GCC 15 - - Clang - - Xcode 15 - - desc: "Erroneous behavior for uninitialized reads (and `[[indeterminate]]` attribute)" - paper: P2795 + - desc: "Interfacing `std::stringstream` with `std::string_view`" + paper: P2495 + lib: true support: - GCC 16 - keywords: ["safety"] - - - desc: '= delete("should have a reason");' - paper: P2573 - summary: "Deleted functions can now include a message explaining why they're deleted." - content: delete-reason.md - support: - - GCC 15 - Clang 19 - Xcode 16.3 ftm: - - name: __cpp_deleted_function - value: 202403L - - - desc: "Clarifying rules for brace elision in [aggregate initialization](https://en.cppreference.com/w/cpp/language/aggregate_initialization.html)" - paper: P3106 - support: - - GCC - - Clang 17 - - Xcode 16.3 - - - desc: "Module declarations shouldn't be macros" - paper: P3034 - support: - - GCC 15 - - Clang 23 + - name: __cpp_lib_sstream_from_string_view + value: 202306L - - desc: "`constexpr` `std::shared_ptr` and friends" - paper: P3037 + - desc: "Formatting pointers" + paper: P2510 lib: true - ftm: - - name: __cpp_lib_constexpr_memory - value: 202506L - - - desc: "Trivial infinite loops are not undefined behavior" - paper: P2809 support: - GCC 14 - - Clang 19 - - Xcode 16.3 - content: trivial-infinite-loops.md - keywords: ["safety"] - - - desc: "`constexpr` placement `new`" - paper: P2747 - summary: "Placement `new` can now be used in constant expressions." - support: - - GCC 15 - - Clang 20 - - Xcode 26 + - Clang 17 + - MSVC 14.40 ftm: - - name: __cpp_constexpr - value: 202406L - - name: __cpp_lib_constexpr_new - value: 202406L + - name: __cpp_lib_format + value: 202304L - - desc: "Structured binding declaration as a condition" - paper: P0963 - summary: "Structured bindings can now be used directly in `if` and `while` conditions." + - desc: "Freestanding Feature-Test Macros and Implementation-Defined Extensions" + paper: P2198 + lib: true support: - - GCC 15 - - Clang 6 (partial) - - Clang 21 - hints: - - target: Clang 6 - msg: "Supported as an extension, not fully conforming to standardized version." + - MSVC 14.38 ftm: - - name: __cpp_structured_bindings - value: 202406L - keywords: ["decompose"] + - name: __cpp_lib_freestanding_feature_test_macros + value: 202306L + - name: __cpp_lib_freestanding_functional + value: 202306L + - name: __cpp_lib_freestanding_iterator + value: 202306L + - name: __cpp_lib_freestanding_memory + value: 202306L + - name: __cpp_lib_freestanding_operator_new + value: 202306L + - name: __cpp_lib_freestanding_ranges + value: 202306L + - name: __cpp_lib_freestanding_ratio + value: 202306L + - name: __cpp_lib_freestanding_tuple + value: 202306L + - name: __cpp_lib_freestanding_utility + value: 202306L - - desc: "`std::optional`" - paper: P2988 - summary: "`std::optional` can now hold references, not just values." + - desc: "Freestanding `std::char_traits`, `std::errc` and facilities in: ``, ``, ``, ``" + paper: P2338 lib: true support: - - GCC 16 - - Clang 22 + - MSVC 14.38 ftm: - - name: __cpp_lib_freestanding_optional - value: 202506L - - name: __cpp_lib_optional - value: 202506L - content: optional-ref.md + - name: __cpp_lib_freestanding_char_traits + value: 202306L + - name: __cpp_lib_freestanding_charconv + value: 202306L + - name: __cpp_lib_freestanding_cstdlib + value: 202306L + - name: __cpp_lib_freestanding_cstring + value: 202306L + - name: __cpp_lib_freestanding_cwchar + value: 202306L + - name: __cpp_lib_freestanding_errc + value: 202306L - - desc: "Debugging support (``)" - paper: - - P2546 - - P2810 - summary: "The `` header provides portable debugging utilities." + - desc: "Freestanding language: Optional `::operator new`" + paper: P2013 lib: true support: - - GCC 16 (hint) - hints: - - target: GCC 16 - msg: "Requires linking with `-lstdc++exp`." - ftm: - - name: __cpp_lib_debugging - value: 202311L - keywords: ["debugger", "breakpoint"] - content: debugging.md + - MSVC 14.38 - - desc: "Variadic friends" - paper: P2893 - summary: "Class templates can now declare all types in a parameter pack as friends." - support: - - GCC 15 - - Clang 20 + - desc: "Atomic minimum/maximum" + paper: P0493 + lib: true ftm: - - name: __cpp_variadic_friend + - name: __cpp_lib_atomic_min_max value: 202403L - - desc: "`std::mdspan::at()`" - paper: P3383 + - desc: "Extending associative containers with the remaining heterogeneous overloads" + paper: P2363 lib: true + ftm: + - name: __cpp_lib_associative_heterogeneous_insertion + value: 202306L + keywords: + [ + "insert", + "insert_or_assign", + "bucket", + "map", + "set", + "unordered", + "emplace", + "multiset", + "multimap", + ] - - desc: "dextents index type parameter (`std::dims`)" - paper: P2389 + - desc: "Enabling the use of `std::weak_ptr` as keys in unordered associative containers" + paper: P1901 lib: true support: - GCC 16 - - Clang 19 ftm: - - name: __cpp_lib_mdspan - value: 202406L + - name: __cpp_lib_smart_ptr_owner_equality + value: 202306L - - desc: "Padded `std::mdspan` layouts" - paper: P2642 + - desc: "`std::text_encoding`: text encodings identification" + paper: + - P1885 + - P2862 lib: true support: - - GCC 16 + - GCC 14 ftm: - - name: __cpp_lib_submdspan - value: 202403L + - name: _cpp_lib_text_encoding + value: 202306L - - desc: "Better `std::mdspan`'s [CTAD](https://en.cppreference.com/w/cpp/language/class_template_argument_deduction.html)" - paper: P3029 + - desc: "`std::function_ref`: type-erased callable reference" + paper: P0792 + summary: "A lightweight, non-owning reference to a callable." lib: true support: - GCC 16 - - Clang 19 + ftm: + - name: __cpp_lib_function_ref + value: 202306L - - desc: "Inspecting `std::exception_ptr`" - paper: P2927 - summary: "Query exception information without rethrowing." + - desc: "Type-checking format args" + paper: P2757 lib: true support: - - GCC 16 + - GCC 15 + ftm: + - name: __cpp_lib_format + value: 202305L - - desc: "Inspecting `std::exception_ptr` should be `constexpr`" - paper: P3748 + - desc: "Member `visit` (`std::variant::visit()`)" + paper: P2637 + summary: "`std::variant` now has a member `.visit()` function." lib: true - ftm: - - name: __cpp_lib_exception_ptr_cast - value: 202506L support: - - GCC 16 + - GCC 15 + - Clang 19 + - Xcode 16.3 + ftm: + - name: __cpp_lib_variant + value: 202306L + - name: __cpp_lib_format + value: 202306L - - desc: "Standardized `constexpr` type ordering" - paper: P2830 - summary: "A standard way to order types at compile time." + - desc: "Checking if a union alternative is active (`std::is_within_lifetime()`)" + paper: P2641 lib: true ftm: - - name: __cpp_lib_type_order - value: 202506L + - name: __cpp_lib_is_within_lifetime + value: 202306L support: - - GCC 16 + - Clang 22 - - desc: "`execution::write_env` and unstoppable sender adaptors" - paper: P3284 + - desc: "Native handles and file streams" + paper: P1759 lib: true + support: + - GCC 14 + - Clang 18 + - Xcode 16 + ftm: + - name: __cpp_lib_fstream_native_handle + value: 202306L - - desc: "Parallel range algorithms" - paper: P3179 - summary: "Range algorithms now support parallel execution policies." + - desc: "Interfacing `std::bitset` with `std::string_view`" + paper: P2697 lib: true + support: + - Clang 18 + - Xcode 16 + - GCC 16 ftm: - - name: __cpp_lib_parallel_algorithm - value: 202506L + - name: __cpp_lib_bitset + value: 202306L - - desc: "Reconsider parallel `ranges::rotate_copy()` and `ranges::reverse_copy()`" - paper: P3709 + - desc: "More constexpr for `` and ``" + paper: P1383 lib: true + support: + - GCC 4.6 + ftm: + - name: __cpp_lib_constexpr_cmath + value: 202306L + - name: __cpp_lib_constexpr_complex + value: 202306L - - desc: "Rename `std::observable()` to `std::observable_checkpoint()`, and add a feature-test macro" - paper: P3641 + - desc: "Adding the new 2022 SI prefixes (`std::quecto`, `std::ronto`, `std::ronna`, `std::quetta`)" + paper: P2734 lib: true + support: + - GCC 14 + - Clang 17 (partial) + ftm: + - name: __cpp_lib_ratio + value: 202306L + hints: + - target: Clang 17 + msg: "Only the feature-testing macro has been added (`__cpp_lib_ratio`)." - - desc: "`std::string::subview()`" - paper: P3044 + - desc: "`std::copyable_function`" + paper: P2548 + summary: "A `std::function` variant that guarantees copyability and const-correctness." lib: true ftm: - - name: __cpp_lib_string_subview - value: 202506L + - name: __cpp_lib_copyable_function + value: 202306L support: - GCC 16 - - Clang 22 - - desc: "Interleaved complex values support in `std::simd`" - paper: P2663 + - desc: "Bind front and back to NTTP callables (`std::bind_front()`, `std::bind_back()`, `std::not_fn`)" + paper: P2714 lib: true + support: + - GCC 16 + - Clang 20 (partial) ftm: - - name: __cpp_lib_simd_complex - value: 202502L + - name: __cpp_lib_bind_front + value: 202306L + desc: "`std::bind_front()` is available" + - name: __cpp_lib_bind_back + value: 202306L + desc: "`std::bind_back()` is available" + - name: __cpp_lib_not_fn + value: 202306L + desc: "`std::not_fn` is available" - - desc: "Extend `` header function with overloads for `std::simd`" - paper: P2933 + - desc: "`std::submdspan()`" + paper: + - P2630 + - P3355 + summary: "Extract sub-views from multidimensional spans." lib: true + support: + - GCC 16 ftm: - - name: __cpp_lib_simd - value: 202506L - - - desc: "Proposal to extend `std::simd` with more constructors and accessors" - paper: P2876 - lib: true + - name: __cpp_lib_submdspan + value: 202306L - - desc: "`std::simd` is a range" - paper: P3480 - lib: true - ftm: - - name: __cpp_lib_simd - value: 202506L + - desc: "Template parameter initialization" + paper: P2308 + support: + - GCC 9 + - Clang 18 + - Xcode 16.3 - - desc: "Extend `std::simd` with permutation API" - paper: P2664 - lib: true + - desc: "[Pack indexing](https://en.cppreference.com/w/cpp/language/pack_indexing.html)" + paper: P2662 + summary: "Pack indexing provides direct access to elements in a parameter pack using `...[N]` syntax." + content: pack-indexing.md + support: + - GCC 15 + - Clang 19 + - Xcode 16.3 ftm: - - name: __cpp_lib_simd_permutations - value: 202506L + - name: __cpp_pack_indexing + value: 202311L - - desc: "Reconsider naming of the namespace for `std::simd`" - paper: P3691 - lib: true + - desc: "Remove deprecated arithmetic conversion on enumerations" + paper: P2864 + support: + - GCC 14 + - Clang 18 + - Xcode 16.3 - - desc: "`std::optional` variants in sender/receiver" - paper: P3570 + - desc: "Saturation arithmetic" + paper: P0543 + summary: "Arithmetic operations that clamp to min/max instead of overflowing." lib: true + support: + - GCC 14 + - Clang 18 + - Xcode 16 ftm: - - name: __cpp_lib_senders - value: 202506L + - name: __cpp_lib_saturation_arithmetic + value: 202311L + keywords: ["math"] - - desc: "`std::execution::bulk()` issues" - paper: P3481 + - desc: "Freestanding library: Partial Classes" + paper: P2407 lib: true + support: + - GCC 14 + - MSVC 14.42 + ftm: + - name: __cpp_lib_freestanding_algorithm + value: 202311L + - name: __cpp_lib_freestanding_array + value: 202311L + - name: __cpp_lib_freestanding_optional + value: 202311L + - name: __cpp_lib_freestanding_string_view + value: 202311L + - name: __cpp_lib_freestanding_variant + value: 202311L - - desc: "Allocator support for operation states" - paper: P3433 + - desc: "Debugging support (``)" + paper: + - P2546 + - P2810 + summary: "The `` header provides portable debugging utilities." lib: true + support: + - GCC 16 (hint) + hints: + - target: GCC 16 + msg: "Requires linking with `-lstdc++exp`." + ftm: + - name: __cpp_lib_debugging + value: 202311L + keywords: ["debugger", "breakpoint"] + content: debugging.md - - desc: "`async_scope` - Creating scopes for non-sequential concurrency" - paper: P3149 + - desc: "Runtime format strings (`std::format()`)" + paper: P2905 lib: true + support: + - GCC 14 + - Clang 18 + - MSVC 14.40 + - Xcode 16 ftm: - - name: __cpp_lib_counting_scope - value: 202506L + - name: __cpp_lib_format + value: 202311L - - desc: "Remove `std::execution::split()`" - paper: P3682 + - desc: "Runtime format strings II (`std::format()`)" + paper: P2918 lib: true + support: + - GCC 14 + - Clang 18 + - Xcode 16 + ftm: + - name: __cpp_lib_format + value: 202311L - - desc: "Parallel scheduler" - paper: P2079 + - desc: "Fix formatting of code units as integers (_Dude, where's my char?_)" + paper: P2909 lib: true + support: + - GCC 13.3 + - Clang 18 + - MSVC 14.40 + - Xcode 16 ftm: - - name: __cpp_lib_parallel_scheduler - value: 202506L + - name: __cpp_lib_format_uchar + value: 202311L - - desc: "Make type-erased allocator use in `std::promise` and `std::packaged_task` consistent" - paper: P3503 + - desc: "A new specification for `std::generate_canonical()`" + paper: P0952 lib: true support: - - MSVC 14.51 + - GCC 16 + - MSVC 14.42 - - desc: "Atomic floating-point min/max" - paper: P3008 + - desc: "`std::span` over an initializer list" + paper: P2447 lib: true + support: + - GCC 15 + - Clang 18 + - Xcode 16 ftm: - - name: __cpp_lib_atomic_min_max - value: 202506L + - name: __cpp_lib_span_initializer_list + value: 202311L - - desc: "Atomic reduction operations" - paper: P3111 + - desc: "`std::span::at()`" + paper: P2821 lib: true + support: + - GCC 14 + - Clang 18 + - Xcode 16 ftm: - - name: __cpp_lib_atomic_reductions - value: 202506L + - name: __cpp_lib_span + value: 202311L - - desc: "Add `std::views::indices(n)`" - paper: P3060 - summary: "Generate a range of indices from 0 to n-1." + - desc: "Remove deprecated `std::allocator` typedef from C++26 (`std::allocator::is_always_equal()`)" + paper: P2868 lib: true support: - - GCC 16 - - Clang 22 - ftm: - - name: __cpp_lib_ranges_indices - value: 202506L + - GCC 15 + - Clang 18 + - Xcode 16 - - desc: "Prevent path presentation problems" - paper: P2319 + - desc: "Remove `std::basic_string::reserve()` from C++26" + paper: P2870 lib: true - ftm: - - name: __cpp_lib_format_path - value: 202506L + support: + - Clang 18 + - Xcode 16 - - desc: "Making `std::istream::ignore` less surprising" - paper: P3223 + - desc: "Remove deprecated Unicode conversion facets from C++26 (``)" + paper: P2871 lib: true support: - - GCC 16 - - Clang 22 - - MSVC 14.50 + - Clang 18 + - Xcode 16 - - desc: "`std::constant_wrapper`" - paper: P2781 - summary: "Wrap compile-time constants as types for template metaprogramming." + - desc: "Add tuple protocol to complex" + paper: P2819 lib: true support: - - GCC 16 + - GCC 15 + - Clang 19 + - Xcode 16.3 ftm: - - name: __cpp_lib_constant_wrapper - value: 202506L + - name: __cpp_lib_tuple_like + value: 202311L - - desc: "High-quality sender diagnostics with `constexpr` exceptions" - paper: P3557 + - desc: "Freestanding: Remove `strtok()`" + paper: P2937 lib: true + support: + - GCC 14 + - MSVC 14.40 + ftm: + - name: __cpp_lib_freestanding_cstring + value: 202311L - - desc: "Preprocessing is never undefined" - paper: P2843 + - desc: "Freestanding library: `std::inout`, `std::expected`, `std::span`" + paper: P2833 + lib: true support: - - GCC 16 + - GCC 14 + - MSVC 14.42 + ftm: + - name: __cpp_lib_freestanding_expected + value: 202311L + - name: __cpp_lib_freestanding_mdspan + value: 202311L + - name: __cpp_lib_out_ptr + value: 202311L + - name: __cpp_lib_span + value: 202311L + desc: 'Related: P2821' - - desc: "Add a coroutine task type" - paper: P3552 - summary: "A standard coroutine task type for async operations." + - desc: "`std::basic_const_iterator` should follow its underlying type's convertibility" + paper: + - P2836 + - P2950 lib: true + support: + - GCC 14 + - MSVC 14.40 ftm: - - name: __cpp_lib_task - value: 202506L + - name: __cpp_lib_ranges_as_const + value: 202311L - - desc: "Remove return type deduction in `std::apply()`" - paper: P1317 + - desc: "Make `assert()` macro user friendly for C and C++" + paper: P2264 + lib: true + + - desc: "A free function linear algebra interface based on the BLAS (``)" + paper: + - P1673 + - P3050 + - P3222 lib: true ftm: - - name: __cpp_lib_apply - value: 202506L + - name: __cpp_lib_linalg + value: 202311L + keywords: ["math"] - - desc: "Ordering of constraints involving fold expressions" - paper: P2963 + - desc: "Disallow binding a returned [glvalue](https://en.cppreference.com/w/cpp/language/value_category.html#glvalue) to a temporary" + paper: P2748 support: + - GCC 14 - Clang 19 - Xcode 16.3 - ftm: - - name: __cpp_fold_expressions - value: 202406L - - desc: "Deleting a pointer to an incomplete type should be ill-formed" - paper: P3144 + - desc: "Clarifying rules for brace elision in [aggregate initialization](https://en.cppreference.com/w/cpp/language/aggregate_initialization.html)" + paper: P3106 support: - - GCC 15 - - Clang 19 + - GCC + - Clang 17 - Xcode 16.3 - - desc: "[Structured bindings](https://en.cppreference.com/w/cpp/language/structured_binding.html) can introduce a pack" - paper: P1061 - summary: "Structured bindings can now capture remaining elements into a parameter pack." + - desc: "Attributes for [structured bindings](https://en.cppreference.com/w/cpp/language/structured_binding.html)" + paper: P0609 support: - - GCC 16 - - Clang 21 + - GCC 15 + - Clang 19 + - Xcode 16.3 ftm: - name: __cpp_structured_bindings - value: 202411L + value: 202403L - - desc: "`constexpr` structured bindings and references to `constexpr` variables" - paper: P2686 + - desc: "Module declarations shouldn't be macros" + paper: P3034 support: - - GCC 16 (partial) - - Clang 22 (partial) - hints: - - target: GCC 16 - msg: "No [references to constexpr variables](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117784)." - - target: Clang 22 - msg: "References to `constexpr` and decomposition of tuple-like types are not supported (only arrays and aggregates are)." + - GCC 15 + - Clang 23 - - desc: "Allowing exception throwing in constant-evaluation (`constexpr` exceptions)" - paper: P3068 - summary: "Exceptions can now be thrown and caught during constant evaluation." - content: constexpr-exceptions.md + - desc: "Trivial infinite loops are not undefined behavior" + paper: P2809 + support: + - GCC 14 + - Clang 19 + - Xcode 16.3 + content: trivial-infinite-loops.md + keywords: ["safety"] + + - desc: "Erroneous behavior for uninitialized reads (and `[[indeterminate]]` attribute)" + paper: P2795 support: - GCC 16 - ftm: - - name: __cpp_constexpr_exceptions - value: 202411L + keywords: ["safety"] - - desc: "The Oxford variadic comma" - paper: P3176 + - desc: '= delete("should have a reason");' + paper: P2573 + summary: "Deleted functions can now include a message explaining why they're deleted." + content: delete-reason.md support: - GCC 15 - - Clang 20 + - Clang 19 + - Xcode 16.3 + ftm: + - name: __cpp_deleted_function + value: 202403L - - desc: "Remove deprecated array comparisons from C++26" - paper: P2865 + - desc: "Variadic friends" + paper: P2893 + summary: "Class templates can now declare all types in a parameter pack as friends." support: - GCC 15 - Clang 20 - - Xcode 16 - keywords: ["safety"] - - - desc: "C++26 should refer to C23 not C17" - paper: P3348 - lib: true - - - desc: "Concept and variable-template template-parameters" - paper: P2841 ftm: - - name: __cpp_template_parameters - value: 202502L + - name: __cpp_variadic_friend + value: 202403L - - desc: "Trivial unions (was `std::uninitialized`)" - paper: P3074 - ftm: - - name: __cpp_trivial_union - value: 202502L + - desc: "Undeprecate `std::polymorphic_allocator::destroy()` for C++26" + paper: P2875 + lib: true + support: + - Clang 15 + - MSVC 14.41 - - desc: "Partial program correctness (`std::observable()`)" - paper: P1494 + - desc: "Remove deprecated strstreams from C++26" + paper: P2867 + lib: true support: - - GCC 16 + - Clang 19 keywords: ["safety"] - - desc: "Testing for success or failure of `` functions" + - desc: "Remove deprecated `std::shared_ptr` atomic access APIs from C++26" + paper: P2869 lib: true - paper: P2497 - support: - - GCC 14 - - Clang 18 - ftm: - - name: __cpp_lib_to_chars - value: 202306L - - desc: "`std::text_encoding`: text encodings identification" - paper: - - P1885 - - P2862 + - desc: "Remove `std::wstring_convert` from C++26" + paper: P2872 lib: true support: - - GCC 14 - ftm: - - name: _cpp_lib_text_encoding - value: 202306L + - Clang 19 - - desc: "Arithmetic overloads of `std::to_string()` and `std::to_wstring()` use `std::format()`" - paper: P2587 + - desc: "Permit an efficient implementation of `std::print()`" + paper: + - P3107 + - P3235 + lib: true + support: + - GCC 16 + - MSVC 14.43 + ftm: + - name: __cpp_lib_print + value: 202403L + keywords: ["format"] + + - desc: "Printing blank lines with `std::println()`" + paper: P3142 lib: true + content: println-blank-lines.md support: - GCC 14 + - Clang 19 + - MSVC 14.41 + - Xcode 16.3 ftm: - - name: __cpp_lib_to_string - value: 202306L + - name: __cpp_lib_print + value: 202403L + keywords: ["format"] - - desc: "Type-checking format args" - paper: P2757 + - desc: "Formatting of `filesystem::path` (`std::formatter`)" + paper: P2845 + lib: true + ftm: + - name: __cpp_lib_format_path + value: 202403L + + - desc: "`views::concat()`" + paper: P2542 lib: true support: - GCC 15 ftm: - - name: __cpp_lib_format - value: 202305L + - name: __cpp_lib_ranges_concat + value: 202403L - - desc: "Formatting pointers" - paper: P2510 + - desc: "Concatenation of `std::string` and `std::string_view`" + paper: P2591 lib: true support: - - GCC 14 - - Clang 17 - - MSVC 14.40 + - GCC 15 + - Clang 19 + - Xcode 16.3 ftm: - - name: __cpp_lib_format - value: 202304L + - name: __cpp_lib_string_view + value: 202403L - - desc: "Hashing support for `chrono` value classes" - paper: P2592 + - desc: "Enabling list-initialization for algorithms" + paper: + - P2248 + - P3217 lib: true support: - - GCC 16 - - Clang 22 + - GCC 15 ftm: - - name: __cpp_lib_chrono - value: 202306L + - name: __cpp_lib_algorithm_default_value_type + value: 202403L - - desc: "Read-copy update (RCU) (``)" - paper: P2545 - summary: "RCU provides efficient concurrent reads with minimal synchronization." + - desc: "Vector API for random number generation (`ranges::generate_random()`)" + paper: P1068 lib: true ftm: - - name: __cpp_lib_rcu - value: 202306L + - name: __cpp_lib_ranges_generate_random + value: 202403L - - desc: "Hazard pointers (``)" - paper: P2530 - summary: "Hazard pointers enable safe memory reclamation in lock-free data structures." + - desc: "Comparisons for `std::reference_wrapper` (and constraints for comparisons of `std::pair`, `std::tuple`, `std::optional`, and `std::variant`)" + paper: P2944 lib: true + support: + - GCC 14 + - Clang 19 (partial) + - Clang 22 (hint) + hints: + - target: Clang 19 + msg: "Constrained equality is not implemented." + - target: Clang 22 + msg: "The changes to `tuple`'s equality overload from P2165 are not yet implemented." ftm: - - name: __cpp_lib_hazard_pointer - value: 202306L + - name: __cpp_lib_constrained_equality + value: 202403L + desc: "Constrained relational operators for `std::pair`, `std::tuple`, `std::optional` and `std::variant`" + - name: __cpp_lib_reference_wrapper + value: 202403L + desc: "Comparisons for `std::reference_wrapper`" - - desc: "ADL-proof `std::projected`" - paper: P2538 + - desc: "Padded `std::mdspan` layouts" + paper: P2642 lib: true support: - - GCC 14 - - Clang 18 - - MSVC 14.38 - - Xcode 16 + - GCC 16 + ftm: + - name: __cpp_lib_submdspan + value: 202403L - - desc: "`constexpr` stable sorting" - paper: P2562 + - desc: "Better `std::mdspan`'s [CTAD](https://en.cppreference.com/w/cpp/language/class_template_argument_deduction.html)" + paper: P3029 lib: true + support: + - GCC 16 + - Clang 19 + + - desc: "`constexpr` placement `new`" + paper: P2747 + summary: "Placement `new` can now be used in constant expressions." support: - GCC 15 - - Clang 21 + - Clang 20 + - Xcode 26 ftm: - - name: __cpp_lib_constexpr_algorithms - value: 202306L + - name: __cpp_constexpr + value: 202406L + - name: __cpp_lib_constexpr_new + value: 202406L - - desc: "Member `visit` (`std::variant::visit()`)" - paper: P2637 - summary: "`std::variant` now has a member `.visit()` function." - lib: true + - desc: "Deleting a pointer to an incomplete type should be ill-formed" + paper: P3144 support: - GCC 15 - Clang 19 - Xcode 16.3 - ftm: - - name: __cpp_lib_variant - value: 202306L - - name: __cpp_lib_format - value: 202306L - - desc: "Checking if a union alternative is active (`std::is_within_lifetime()`)" - paper: P2641 - lib: true - ftm: - - name: __cpp_lib_is_within_lifetime - value: 202306L + - desc: "Ordering of constraints involving fold expressions" + paper: P2963 support: - - Clang 22 - - - desc: "Extending associative containers with the remaining heterogeneous overloads" - paper: P2363 - lib: true + - Clang 19 + - Xcode 16.3 ftm: - - name: __cpp_lib_associative_heterogeneous_insertion - value: 202306L - keywords: - [ - "insert", - "insert_or_assign", - "bucket", - "map", - "set", - "unordered", - "emplace", - "multiset", - "multimap", - ] + - name: __cpp_fold_expressions + value: 202406L - - desc: "Enabling the use of `std::weak_ptr` as keys in unordered associative containers" - paper: P1901 - lib: true + - desc: "Structured binding declaration as a condition" + paper: P0963 + summary: "Structured bindings can now be used directly in `if` and `while` conditions." support: - - GCC 16 + - GCC 15 + - Clang 6 (partial) + - Clang 21 + hints: + - target: Clang 6 + msg: "Supported as an extension, not fully conforming to standardized version." ftm: - - name: __cpp_lib_smart_ptr_owner_equality - value: 202306L + - name: __cpp_structured_bindings + value: 202406L + keywords: ["decompose"] - - desc: "Native handles and file streams" - paper: P1759 + - desc: "Removing the common reference requirement from the indirectly invocable concepts" + paper: P2997 lib: true support: - - GCC 14 - - Clang 18 - - Xcode 16 - ftm: - - name: __cpp_lib_fstream_native_handle - value: 202306L + - GCC 15 + - Clang 19 + - MSVC 14.42 - - desc: "Interfacing `std::stringstream` with `std::string_view`" - paper: P2495 + - desc: "dextents index type parameter (`std::dims`)" + paper: P2389 lib: true support: - GCC 16 - Clang 19 - - Xcode 16.3 ftm: - - name: __cpp_lib_sstream_from_string_view - value: 202306L + - name: __cpp_lib_mdspan + value: 202406L - - desc: "Interfacing `std::bitset` with `std::string_view`" - paper: P2697 + - desc: "Give `std::optional` range support" + paper: P3168 + summary: "`std::optional` is now a range containing zero or one elements." lib: true support: - - Clang 18 - - Xcode 16 - GCC 16 + - Clang 22 ftm: - - name: __cpp_lib_bitset - value: 202306L + - name: __cpp_lib_optional_range_support + value: 202406L - - desc: "More constexpr for `` and ``" - paper: P1383 + - desc: "A type trait for detecting virtual base classes (`std::is_virtual_base_of`)" + paper: P2985 lib: true support: - - GCC 4.6 + - GCC 15 + - Clang 20 + - Xcode 26 ftm: - - name: __cpp_lib_constexpr_cmath - value: 202306L - - name: __cpp_lib_constexpr_complex - value: 202306L + - name: __cpp_lib_is_virtual_base_of + value: 202406L - - desc: "Adding the new 2022 SI prefixes (`std::quecto`, `std::ronto`, `std::ronna`, `std::quetta`)" - paper: P2734 + - desc: "`std::inplace_vector`: dynamically-resizable vector with fixed capacity (``)" + paper: P0843 + summary: "A fixed-capacity vector that stores elements inline without heap allocation." + content: inplace-vector.md lib: true support: - - GCC 14 - - Clang 17 (partial) + - GCC 16 ftm: - - name: __cpp_lib_ratio - value: 202306L - hints: - - target: Clang 17 - msg: "Only the feature-testing macro has been added (`__cpp_lib_ratio`)." - - - desc: "`std::function_ref`: type-erased callable reference" - paper: P0792 - summary: "A lightweight, non-owning reference to a callable." + - name: __cpp_lib_inplace_vector + value: 202406L + + - desc: "Make `std::ignore` a first-class object" + paper: P2968 lib: true support: - - GCC 16 - ftm: - - name: __cpp_lib_function_ref - value: 202306L + - GCC 15 + - Clang 19 + - MSVC 14.42 - - desc: "`std::copyable_function`" - paper: P2548 - summary: "A `std::function` variant that guarantees copyability and const-correctness." + - desc: "Philox as an extension of the C++ RNG engines (`std::philox_engine`)" + paper: P2075 lib: true ftm: - - name: __cpp_lib_copyable_function - value: 202306L + - name: __cpp_lib_philox_engine + value: 202406L support: - GCC 16 + keywords: ["random"] - - desc: "Bind front and back to NTTP callables (`std::bind_front()`, `std::bind_back()`, `std::not_fn`)" - paper: P2714 + - desc: "Remove `[[nodiscard]]` annotations from the standard library specification" + paper: P2422 lib: true support: - - GCC 16 - - Clang 20 (partial) - ftm: - - name: __cpp_lib_bind_front - value: 202306L - desc: "`std::bind_front()` is available" - - name: __cpp_lib_bind_back - value: 202306L - desc: "`std::bind_back()` is available" - - name: __cpp_lib_not_fn - value: 202306L - desc: "`std::not_fn` is available" + - Clang 19 (hint) + hints: + - target: Clang 19 + msg: "`nodiscard` attributes were kept as a conforming extension." - - desc: "`std::submdspan()`" + - desc: "`std::execution` (``)" paper: - - P2630 - - P3355 - summary: "Extract sub-views from multidimensional spans." + - P2300 + - P3396 + summary: "A framework for asynchronous and parallel programming based on senders and receivers." lib: true - support: - - GCC 16 ftm: - - name: __cpp_lib_submdspan - value: 202306L + - name: __cpp_lib_senders + value: 202406L + content: execution.md - - desc: "Freestanding language: Optional `::operator new`" - paper: P2013 - lib: true + - desc: "`constexpr` structured bindings and references to `constexpr` variables" + paper: P2686 support: - - MSVC 14.38 + - GCC 16 (partial) + - Clang 22 (partial) + hints: + - target: GCC 16 + msg: "No [references to constexpr variables](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117784)." + - target: Clang 22 + msg: "References to `constexpr` and decomposition of tuple-like types are not supported (only arrays and aggregates are)." - - desc: "Freestanding `std::char_traits`, `std::errc` and facilities in: ``, ``, ``, ``" - paper: P2338 - lib: true + - desc: "Allowing exception throwing in constant-evaluation (`constexpr` exceptions)" + paper: P3068 + summary: "Exceptions can now be thrown and caught during constant evaluation." + content: constexpr-exceptions.md support: - - MSVC 14.38 + - GCC 16 ftm: - - name: __cpp_lib_freestanding_char_traits - value: 202306L - - name: __cpp_lib_freestanding_charconv - value: 202306L - - name: __cpp_lib_freestanding_cstdlib - value: 202306L - - name: __cpp_lib_freestanding_cstring - value: 202306L - - name: __cpp_lib_freestanding_cwchar - value: 202306L - - name: __cpp_lib_freestanding_errc - value: 202306L + - name: __cpp_constexpr_exceptions + value: 202411L - - desc: "Freestanding Feature-Test Macros and Implementation-Defined Extensions" - paper: P2198 + - desc: "Deprecate the notion of trivial types (`std::is_trivial` and `std::is_trivial_v`)" + paper: P3247 lib: true support: - - MSVC 14.38 - ftm: - - name: __cpp_lib_freestanding_feature_test_macros - value: 202306L - - name: __cpp_lib_freestanding_functional - value: 202306L - - name: __cpp_lib_freestanding_iterator - value: 202306L - - name: __cpp_lib_freestanding_memory - value: 202306L - - name: __cpp_lib_freestanding_operator_new - value: 202306L - - name: __cpp_lib_freestanding_ranges - value: 202306L - - name: __cpp_lib_freestanding_ratio - value: 202306L - - name: __cpp_lib_freestanding_tuple - value: 202306L - - name: __cpp_lib_freestanding_utility - value: 202306L + - GCC 15 + - Clang 21 - - desc: "Saturation arithmetic" - paper: P0543 - summary: "Arithmetic operations that clamp to min/max instead of overflowing." - lib: true + - desc: "Remove deprecated array comparisons from C++26" + paper: P2865 support: - - GCC 14 - - Clang 18 + - GCC 15 + - Clang 20 - Xcode 16 - ftm: - - name: __cpp_lib_saturation_arithmetic - value: 202311L - keywords: ["math"] + keywords: ["safety"] - - desc: "A free function linear algebra interface based on the BLAS (``)" - paper: - - P1673 - - P3050 - - P3222 - lib: true + - desc: "[Structured bindings](https://en.cppreference.com/w/cpp/language/structured_binding.html) can introduce a pack" + paper: P1061 + summary: "Structured bindings can now capture remaining elements into a parameter pack." + support: + - GCC 16 + - Clang 21 ftm: - - name: __cpp_lib_linalg - value: 202311L - keywords: ["math"] + - name: __cpp_structured_bindings + value: 202411L - - desc: "Make `assert()` macro user friendly for C and C++" - paper: P2264 - lib: true + - desc: "The Oxford variadic comma" + paper: P3176 + support: + - GCC 15 + - Clang 20 - - desc: "Runtime format strings (`std::format()`)" - paper: P2905 + - desc: "Retiring niebloids" + paper: P3136 lib: true support: - - GCC 14 - - Clang 18 - - MSVC 14.40 - - Xcode 16 - ftm: - - name: __cpp_lib_format - value: 202311L + - GCC + - Clang 14 + - MSVC 14.39 + - Xcode 14.3 - - desc: "Runtime format strings II (`std::format()`)" - paper: P2918 + - desc: "`views::cache_latest()` (`views::cache_latest_view`)" + paper: P3138 + summary: "Cache the most recent element for repeated access." lib: true support: - - GCC 14 - - Clang 18 - - Xcode 16 + - GCC 15 ftm: - - name: __cpp_lib_format - value: 202311L + - name: __cpp_lib_ranges_cache_latest + value: 202411L - - desc: "`std::span` over an initializer list" - paper: P2447 + - desc: "Constrain `std::expected` equality operators" + paper: P3379 lib: true support: - GCC 15 - - Clang 18 - - Xcode 16 + - Clang 21 ftm: - - name: __cpp_lib_span_initializer_list - value: 202311L + - name: __cpp_lib_constrained_equality + value: 202411L - - desc: "`std::span::at()`" - paper: P2821 + - desc: "`std::aligned_accessor`: An `std::mdspan` accessor expressing pointer over-alignment (and `std::is_sufficiently_aligned()`)" + paper: P2897 lib: true support: - - GCC 14 - - Clang 18 - - Xcode 16 + - GCC 16 + - Clang 21 ftm: - - name: __cpp_lib_span - value: 202311L + - name: __cpp_lib_aligned_accessor + value: 202411L - - desc: "Add tuple protocol to complex" - paper: P2819 + - desc: "Expose `std::atomic_ref`'s object address (`std::atomic_ref::address()`)" + paper: P2835 lib: true support: - - GCC 15 - - Clang 19 - - Xcode 16.3 + - Clang 22 ftm: - - name: __cpp_lib_tuple_like - value: 202311L + - name: __cpp_lib_atomic_ref + value: 202411L - - desc: "A new specification for `std::generate_canonical()`" - paper: P0952 + - desc: "cv-qualified types in `std::atomic` and `std::atomic_ref`" + paper: P3323 lib: true support: - GCC 16 - - MSVC 14.42 + - MSVC 14.44 - - desc: "Remove deprecated `std::allocator` typedef from C++26 (`std::allocator::is_always_equal()`)" - paper: P2868 + - desc: 'Wording for "`constexpr` for specialized memory algorithms"' + paper: P3508 lib: true support: - GCC 15 - - Clang 18 - - Xcode 16 + ftm: + - name: __cpp_lib_raw_memory_algorithms + value: 202411L - - desc: "Remove `std::basic_string::reserve()` from C++26" - paper: P2870 + - desc: "`constexpr` for `std::uninitialized_default_construct()`" + paper: P3369 lib: true - support: - - Clang 18 - - Xcode 16 + ftm: + - name: __cpp_lib_raw_memory_algorithms + value: 202411L - - desc: "Remove deprecated Unicode conversion facets from C++26 (``)" - paper: P2871 + - desc: "Add new library headers from C23 (`` and ``)" + paper: P3370 lib: true support: - - Clang 18 - - Xcode 16 + - GCC 15 - - desc: "Freestanding: Remove `strtok()`" - paper: P2937 + - desc: "`constexpr` `std::atomic` and `std::atomic_ref`" + paper: P3309 lib: true - support: - - GCC 14 - - MSVC 14.40 ftm: - - name: __cpp_lib_freestanding_cstring - value: 202311L + - name: __cpp_lib_constexpr_atomic + value: 202411L - - desc: "Freestanding library: Partial Classes" - paper: P2407 + - desc: "`std::simd` (``)" + paper: P1928 + summary: "Portable SIMD (Single Instruction, Multiple Data) vector types." + content: simd.md lib: true - support: - - GCC 14 - - MSVC 14.42 ftm: - - name: __cpp_lib_freestanding_algorithm - value: 202311L - - name: __cpp_lib_freestanding_array - value: 202311L - - name: __cpp_lib_freestanding_optional - value: 202311L - - name: __cpp_lib_freestanding_string_view - value: 202311L - - name: __cpp_lib_freestanding_variant - value: 202311L + - name: __cpp_lib_simd + value: 202411L + - name: __cpp_lib_simd_complex + value: 202502L + desc: "Support for interleaved complex values in std::datapar::simd" - - desc: "Freestanding library: `std::inout`, `std::expected`, `std::span`" - paper: P2833 + - desc: "Utility for creating execution environments" + paper: P3325 lib: true - support: - - GCC 14 - - MSVC 14.42 + + - desc: "Trivial unions (was `std::uninitialized`)" + paper: P3074 ftm: - - name: __cpp_lib_freestanding_expected - value: 202311L - - name: __cpp_lib_freestanding_mdspan - value: 202311L - - name: __cpp_lib_out_ptr - value: 202311L - - name: __cpp_lib_span - value: 202311L - desc: 'Related: P2821' + - name: __cpp_trivial_union + value: 202502L - - desc: "`std::basic_const_iterator` should follow its underlying type's convertibility" - paper: - - P2836 - - P2950 + - desc: "`constexpr` `std::inplace_vector` for non-trivial types" + paper: P3074 lib: true + ftm: + - name: __cpp_lib_constexpr_inplace_vector + value: 202502L + + - desc: "Partial program correctness (`std::observable()`)" + paper: P1494 support: - - GCC 14 - - MSVC 14.40 + - GCC 16 + keywords: ["safety"] + + - desc: "Contracts for C++ (``)" + paper: P2900 + summary: "Contracts let you specify preconditions, postconditions, and assertions that document and enforce function requirements." ftm: - - name: __cpp_lib_ranges_as_const - value: 202311L + - name: __cpp_contracts + value: 202502L + desc: "Core language feature" + - name: __cpp_lib_contracts + value: 202502L + desc: "Library API is available. This is a separate macro to allow for mixing language (compiler) support with different standard library implementations, where this macro specifies the level of support for contracts by that standard library implementation." + keywords: ["safety"] + content: contracts.md - - desc: "Fix formatting of code units as integers (_Dude, where's my char?_)" - paper: P2909 + - desc: "Defang and deprecate `std::memory_order::consume`" + paper: P3475 lib: true + + - desc: "Concept and variable-template template-parameters" + paper: P2841 + ftm: + - name: __cpp_template_parameters + value: 202502L + + - desc: "`#embed` - a scannable, tooling-friendly binary resource inclusion mechanism" + paper: P1967 + summary: "`#embed` allows you to include binary files directly into your source code at compile time." support: - - GCC 13.3 - - Clang 18 - - MSVC 14.40 - - Xcode 16 + - GCC 15 (hint) + - Clang 19 (hint) + - Xcode 16.3 (hint) + hints: + - target: GCC 15 + msg: > + Although this is a C++26 feature, this is available in GCC starting with C++20 (`-std=c++20`). + + - target: Clang 19 + msg: > + Supported as an extension.
+ Use the flag `-Wno-c23-extensions` to suppress warnings related to `#embed`.
+ Although this is a C++26 feature, this is available in Clang starting with C++20 (`-std=c++20`).
+ Clang does not define the `__cpp_pp_embed` feature-testing macro yet. + + - target: Xcode 16.3 + msg: > + Supported as an extension.
+ Use the flag `-Wno-c23-extensions` to suppress warnings related to `#embed`.
+ Although this is a C++26 feature, this is available in Apple Clang starting with C++20 (`-std=c++20`).
+ Apple Clang does not define the `__cpp_pp_embed` feature-testing macro yet. ftm: - - name: __cpp_lib_format_uchar - value: 202311L + - name: __cpp_pp_embed + value: 202502L + content: embed.md - - desc: "`views::concat()`" - paper: P2542 + - desc: "`views::to_input()` (`ranges::to_input_view`)" + paper: P3137 + summary: "Convert any range to an input range." lib: true support: - GCC 15 ftm: - - name: __cpp_lib_ranges_concat - value: 202403L + - name: __cpp_lib_ranges_to_input + value: 202502L - - desc: "Concatenation of `std::string` and `std::string_view`" - paper: P2591 + - desc: "Put `std::monostate` in ``" + paper: P0472 lib: true support: - GCC 15 - - Clang 19 - - Xcode 16.3 - ftm: - - name: __cpp_lib_string_view - value: 202403L + - Clang 21 + - MSVC 14.50 - - desc: "Enabling list-initialization for algorithms" - paper: - - P2248 - - P3217 + - desc: "Converting contiguous iterators to pointers" + paper: P3349 lib: true support: - GCC 15 - ftm: - - name: __cpp_lib_algorithm_default_value_type - value: 202403L + - MSVC 14.51 - - desc: "Vector API for random number generation (`ranges::generate_random()`)" - paper: P1068 + - desc: "`constexpr` containers and adaptors" + paper: P3372 + summary: "More standard containers work at compile time." lib: true ftm: - - name: __cpp_lib_ranges_generate_random - value: 202403L + - name: __cpp_lib_constexpr_deque + value: 202502L + desc: "`constexpr` `std::deque`" + - name: __cpp_lib_constexpr_flat_map + value: 202502L + desc: "`constexpr` `std::flat_map`" + - name: __cpp_lib_constexpr_flat_set + value: 202502L + desc: "`constexpr` `std::flat_set`" + - name: __cpp_lib_constexpr_forward_list + value: 202502L + desc: "`constexpr` `std::forward_list`" + - name: __cpp_lib_constexpr_list + value: 202502L + desc: "`constexpr` `std::list`" + - name: __cpp_lib_constexpr_map + value: 202502L + desc: "`constexpr` `std::map`" + - name: __cpp_lib_constexpr_queue + value: 202502L + desc: "`constexpr` `std::queue`" + - name: __cpp_lib_constexpr_set + value: 202502L + desc: "`constexpr` `std::set`" + - name: __cpp_lib_constexpr_stack + value: 202502L + desc: "`constexpr` `std::stack`" + - name: __cpp_lib_constexpr_unordered_map + value: 202502L + desc: "`constexpr` `std::unordered_map`" + - name: __cpp_lib_constexpr_unordered_set + value: 202502L + desc: "`constexpr` `std::unordered_set`" - - desc: "Comparisons for `std::reference_wrapper` (and constraints for comparisons of `std::pair`, `std::tuple`, `std::optional`, and `std::variant`)" - paper: P2944 + - desc: "`constexpr` exception types" + paper: P3378 lib: true + ftm: + - name: __cpp_lib_constexpr_exceptions + value: 202411L support: - - GCC 14 - - Clang 19 (partial) - - Clang 22 (hint) - hints: - - target: Clang 19 - msg: "Constrained equality is not implemented." - - target: Clang 22 - msg: "The changes to `tuple`'s equality overload from P2165 are not yet implemented." + - GCC 16 + + - desc: "Rename `simd_split()` to `simd_chunk()`" + paper: P3441 + lib: true + + - desc: "Freestanding library: ``, ``, and ``" + paper: P2976 + lib: true ftm: - - name: __cpp_lib_constrained_equality - value: 202403L - desc: "Constrained relational operators for `std::pair`, `std::tuple`, `std::optional` and `std::variant`" - - name: __cpp_lib_reference_wrapper - value: 202403L - desc: "Comparisons for `std::reference_wrapper`" + - name: __cpp_lib_freestanding_algorithm + value: 202502L + - name: __cpp_lib_freestanding_execution + value: 202502L + - name: __cpp_lib_freestanding_memory + value: 202502L + - name: __cpp_lib_freestanding_numeric + value: 202502L + - name: __cpp_lib_freestanding_random + value: 202502L - - desc: "Atomic minimum/maximum" - paper: P0493 + - desc: "Interleaved complex values support in `std::simd`" + paper: P2663 lib: true ftm: - - name: __cpp_lib_atomic_min_max - value: 202403L + - name: __cpp_lib_simd_complex + value: 202502L + + - desc: "Extend `` header function with overloads for `std::simd`" + paper: P2933 + lib: true + ftm: + - name: __cpp_lib_simd + value: 202506L + + - desc: "`ranges::approximately_sized_range` and `ranges::reserve_hint()`" + paper: P2846 + summary: "Ranges can provide size hints for better allocation." + lib: true + ftm: + - name: __cpp_lib_ranges_reserve_hint + value: 202502L + + - desc: "Standard library hardening" + paper: P3471 + lib: true + support: + - GCC 15 (partial) + - Clang 18 (partial) + - MSVC 14.44 (partial) + - Xcode 16 (partial) + hints: + - target: GCC 15 + msg: "Calls `abort()` instead of using C++26 contracts when a hardened precondition is violated." + - target: Clang 18 + msg: "Calls `__builtin_expect(false, ...)` instead of using C++26 contracts when a hardened precondition is violated." + - target: MSVC 14.44 + msg: "Calls `__fastfail()` instead of using C++26 contracts when a hardened precondition is violated." + - target: Xcode 16 + msg: "Calls `__builtin_expect(false, ...)` instead of using C++26 contracts when a hardened precondition is violated." + ftm: + - name: __cpp_lib_hardened_array + desc: "Hardened `std::array`" + value: 202502L + - name: __cpp_lib_hardened_basic_string + desc: "Hardened `std::basic_string`" + value: 202502L + - name: __cpp_lib_hardened_basic_string_view + desc: "Hardened `std::basic_string_view`" + value: 202502L + - name: __cpp_lib_hardened_bitset + desc: "Hardened `std::bitset`" + value: 202502L + - name: __cpp_lib_hardened_deque + desc: "Hardened `std::deque`" + value: 202502L + - name: __cpp_lib_hardened_expected + desc: "Hardened `std::expected`" + value: 202502L + - name: __cpp_lib_hardened_forward_list + desc: "Hardened `std::forward_list`" + value: 202502L + - name: __cpp_lib_hardened_inplace_vector + desc: "Hardened `std::inplace_vector`" + value: 202502L + - name: __cpp_lib_hardened_list + desc: "Hardened `std::list`" + value: 202502L + - name: __cpp_lib_hardened_mdspan + desc: "Hardened `std::mdspan`" + value: 202502L + - name: __cpp_lib_hardened_optional + desc: "Hardened `std::optional`" + value: 202502L + - name: __cpp_lib_hardened_span + desc: "Hardened `std::span`" + value: 202502L + - name: __cpp_lib_hardened_valarray + desc: "Hardened `std::valarray`" + value: 202502L + - name: __cpp_lib_hardened_vector + desc: "Hardened `std::vector`" + value: 202502L + keywords: ["safety"] + content: hardening.md - - desc: "Formatting of `filesystem::path` (`std::formatter`)" - paper: P2845 + - desc: "`std::hive` (``)" + paper: P0447 + summary: "A container optimized for frequent insert/erase with stable iterators." + content: hive.md lib: true ftm: - - name: __cpp_lib_format_path - value: 202403L + - name: __cpp_lib_hive + value: 202502L + keywords: ["container"] - - desc: "Printing blank lines with `std::println()`" - paper: P3142 + - desc: "`std::indirect` and `std::polymorphic`: Vocabulary Types for Composite Class Design" + paper: P3019 + summary: "Value-semantic wrappers for indirect and polymorphic ownership." lib: true - content: println-blank-lines.md support: - - GCC 14 - - Clang 19 - - MSVC 14.41 - - Xcode 16.3 + - GCC 16 ftm: - - name: __cpp_lib_print - value: 202403L - keywords: ["format"] + - name: __cpp_lib_indirect + value: 202502L + desc: "`std::indirect` is available" + - name: __cpp_lib_polymorphic + value: 202502L + desc: "`std::polymorphic` is available" - - desc: "Undeprecate `std::polymorphic_allocator::destroy()` for C++26" - paper: P2875 - lib: true + - desc: "Allow attaching `main()` to the global module" + paper: P3618 support: - - Clang 15 - - MSVC 14.41 + - GCC 16 + - Clang 21 - - desc: "Remove deprecated strstreams from C++26" - paper: P2867 + - desc: "Reflection for C++26 (``)" + paper: P2996 + summary: "Reflection allows programs to inspect and manipulate their own structure at compile time. This is one of the most significant additions to C++26." lib: true support: - - Clang 19 - keywords: ["safety"] + - GCC 16 (hint) + hints: + - target: GCC 16 + msg: "Requires `-freflection`" + ftm: + - name: __cpp_impl_reflection + value: 202506L + content: reflection.md - - desc: "Remove deprecated `std::shared_ptr` atomic access APIs from C++26" - paper: P2869 - lib: true + - desc: "Annotations for Reflection" + paper: P3394 + support: + - GCC 16 - - desc: "Remove `std::wstring_convert` from C++26" - paper: P2872 - lib: true + - desc: "Splicing a base class subobject" + paper: P3293 support: - - Clang 19 + - GCC 16 + keywords: ["reflection"] - - desc: "Permit an efficient implementation of `std::print()`" - paper: - - P3107 - - P3235 + - desc: "`define_static_{string,object,array}`" + paper: P3491 lib: true support: - GCC 16 - - MSVC 14.43 ftm: - - name: __cpp_lib_print - value: 202403L - keywords: ["format"] + - name: __cpp_lib_define_static + value: 202506L + keywords: ["reflection"] - - desc: "Remove `[[nodiscard]]` annotations from the standard library specification" - paper: P2422 - lib: true + - desc: "Expansion Statements (`template for`)" + paper: P1306 + summary: "`template for` iterates over compile-time ranges like tuples and reflection results." support: - - Clang 19 (hint) - hints: - - target: Clang 19 - msg: "`nodiscard` attributes were kept as a conforming extension." - - - desc: "`std::execution` (``)" - paper: - - P2300 - - P3396 - summary: "A framework for asynchronous and parallel programming based on senders and receivers." - lib: true + - GCC 16 ftm: - - name: __cpp_lib_senders - value: 202406L - content: execution.md + - name: __cpp_expansion_statements + value: 202506L + keywords: ["reflection"] - - desc: "`std::inplace_vector`: dynamically-resizable vector with fixed capacity (``)" - paper: P0843 - summary: "A fixed-capacity vector that stores elements inline without heap allocation." - content: inplace-vector.md + - desc: "Function Parameter Reflection in Reflection for C++26" + paper: P3096 lib: true support: - GCC 16 - ftm: - - name: __cpp_lib_inplace_vector - value: 202406L - - desc: "Philox as an extension of the C++ RNG engines (`std::philox_engine`)" - paper: P2075 - lib: true + - desc: "`constexpr` virtual inheritance" + paper: P3533 + content: constexpr-virtual-inheritance.md + support: + - GCC 16 ftm: - - name: __cpp_lib_philox_engine - value: 202406L + - name: __cpp_constexpr_virtual_inheritance + value: 202506L + + - desc: "Preprocessing is never undefined" + paper: P2843 support: - GCC 16 - keywords: ["random"] - - desc: "Give `std::optional` range support" - paper: P3168 - summary: "`std::optional` is now a range containing zero or one elements." + - desc: "`std::optional`" + paper: P2988 + summary: "`std::optional` can now hold references, not just values." lib: true support: - GCC 16 - Clang 22 ftm: - - name: __cpp_lib_optional_range_support - value: 202406L + - name: __cpp_lib_freestanding_optional + value: 202506L + - name: __cpp_lib_optional + value: 202506L + content: optional-ref.md - - desc: "A type trait for detecting virtual base classes (`std::is_virtual_base_of`)" - paper: P2985 + - desc: "C++26 should refer to C23 not C17" + paper: P3348 + lib: true + + - desc: "`constexpr` `std::shared_ptr` and friends" + paper: P3037 lib: true - support: - - GCC 15 - - Clang 20 - - Xcode 26 ftm: - - name: __cpp_lib_is_virtual_base_of - value: 202406L + - name: __cpp_lib_constexpr_memory + value: 202506L - - desc: "Make `std::ignore` a first-class object" - paper: P2968 + - desc: "`execution::write_env` and unstoppable sender adaptors" + paper: P3284 lib: true - support: - - GCC 15 - - Clang 19 - - MSVC 14.42 - - desc: "Removing the common reference requirement from the indirectly invocable concepts" - paper: P2997 + - desc: "Parallel range algorithms" + paper: P3179 + summary: "Range algorithms now support parallel execution policies." lib: true - support: - - GCC 15 - - Clang 19 - - MSVC 14.42 + ftm: + - name: __cpp_lib_parallel_algorithm + value: 202506L - - desc: "Deprecate the notion of trivial types (`std::is_trivial` and `std::is_trivial_v`)" - paper: P3247 + - desc: "Reconsider parallel `ranges::rotate_copy()` and `ranges::reverse_copy()`" + paper: P3709 lib: true - support: - - GCC 15 - - Clang 21 - - desc: "Retiring niebloids" - paper: P3136 + - desc: "Rename `std::observable()` to `std::observable_checkpoint()`, and add a feature-test macro" + paper: P3641 lib: true - support: - - GCC - - Clang 14 - - MSVC 14.39 - - Xcode 14.3 - - desc: "`views::cache_latest()` (`views::cache_latest_view`)" - paper: P3138 - summary: "Cache the most recent element for repeated access." + - desc: "`std::string::subview()`" + paper: P3044 lib: true - support: - - GCC 15 ftm: - - name: __cpp_lib_ranges_cache_latest - value: 202411L + - name: __cpp_lib_string_subview + value: 202506L + support: + - GCC 16 + - Clang 22 - - desc: "Constrain `std::expected` equality operators" - paper: P3379 + - desc: "Proposal to extend `std::simd` with more constructors and accessors" + paper: P2876 + lib: true + + - desc: "`std::simd` is a range" + paper: P3480 lib: true - support: - - GCC 15 - - Clang 21 ftm: - - name: __cpp_lib_constrained_equality - value: 202411L + - name: __cpp_lib_simd + value: 202506L - - desc: "`std::aligned_accessor`: An `std::mdspan` accessor expressing pointer over-alignment (and `std::is_sufficiently_aligned()`)" - paper: P2897 + - desc: "Extend `std::simd` with permutation API" + paper: P2664 lib: true - support: - - GCC 16 - - Clang 21 ftm: - - name: __cpp_lib_aligned_accessor - value: 202411L + - name: __cpp_lib_simd_permutations + value: 202506L + + - desc: "Reconsider naming of the namespace for `std::simd`" + paper: P3691 + lib: true - - desc: "Expose `std::atomic_ref`'s object address (`std::atomic_ref::address()`)" - paper: P2835 + - desc: "`std::mdspan::at()`" + paper: P3383 lib: true - support: - - Clang 22 - ftm: - - name: __cpp_lib_atomic_ref - value: 202411L - - desc: "cv-qualified types in `std::atomic` and `std::atomic_ref`" - paper: P3323 + - desc: "Inspecting `std::exception_ptr`" + paper: P2927 + summary: "Query exception information without rethrowing." lib: true support: - GCC 16 - - MSVC 14.44 - - desc: "`constexpr` `std::atomic` and `std::atomic_ref`" - paper: P3309 + - desc: "Inspecting `std::exception_ptr` should be `constexpr`" + paper: P3748 lib: true ftm: - - name: __cpp_lib_constexpr_atomic - value: 202411L + - name: __cpp_lib_exception_ptr_cast + value: 202506L + support: + - GCC 16 - - desc: 'Wording for "`constexpr` for specialized memory algorithms"' - paper: P3508 + - desc: "Standardized `constexpr` type ordering" + paper: P2830 + summary: "A standard way to order types at compile time." lib: true - support: - - GCC 15 ftm: - - name: __cpp_lib_raw_memory_algorithms - value: 202411L + - name: __cpp_lib_type_order + value: 202506L + support: + - GCC 16 - - desc: "`constexpr` for `std::uninitialized_default_construct()`" - paper: P3369 + - desc: "`std::optional` variants in sender/receiver" + paper: P3570 lib: true ftm: - - name: __cpp_lib_raw_memory_algorithms - value: 202411L + - name: __cpp_lib_senders + value: 202506L - - desc: "Add new library headers from C23 (`` and ``)" - paper: P3370 + - desc: "`std::execution::bulk()` issues" + paper: P3481 lib: true - support: - - GCC 15 - - desc: "`std::simd` (``)" - paper: P1928 - summary: "Portable SIMD (Single Instruction, Multiple Data) vector types." - content: simd.md + - desc: "Allocator support for operation states" + paper: P3433 lib: true - ftm: - - name: __cpp_lib_simd - value: 202411L - - name: __cpp_lib_simd_complex - value: 202502L - desc: "Support for interleaved complex values in std::datapar::simd" - - desc: "Rename `simd_split()` to `simd_chunk()`" - paper: P3441 + - desc: "`async_scope` - Creating scopes for non-sequential concurrency" + paper: P3149 lib: true + ftm: + - name: __cpp_lib_counting_scope + value: 202506L - - desc: "Utility for creating execution environments" - paper: P3325 + - desc: "Remove `std::execution::split()`" + paper: P3682 lib: true - - desc: "`constexpr` exception types" - paper: P3378 + - desc: "Parallel scheduler" + paper: P2079 lib: true ftm: - - name: __cpp_lib_constexpr_exceptions - value: 202411L - support: - - GCC 16 + - name: __cpp_lib_parallel_scheduler + value: 202506L - - desc: "Defang and deprecate `std::memory_order::consume`" - paper: P3475 + - desc: "High-quality sender diagnostics with `constexpr` exceptions" + paper: P3557 lib: true - - desc: "Put `std::monostate` in ``" - paper: P0472 + - desc: "Error Handling in Reflection" + paper: P3560 lib: true support: - - GCC 15 - - Clang 21 - - MSVC 14.50 + - GCC 16 + ftm: + - name: __cpp_lib_reflection + value: 202506L - - desc: "`std::indirect` and `std::polymorphic`: Vocabulary Types for Composite Class Design" - paper: P3019 - summary: "Value-semantic wrappers for indirect and polymorphic ownership." + - desc: "Make type-erased allocator use in `std::promise` and `std::packaged_task` consistent" + paper: P3503 lib: true support: - - GCC 16 - ftm: - - name: __cpp_lib_indirect - value: 202502L - desc: "`std::indirect` is available" - - name: __cpp_lib_polymorphic - value: 202502L - desc: "`std::polymorphic` is available" + - MSVC 14.51 - - desc: "`constexpr` containers and adaptors" - paper: P3372 - summary: "More standard containers work at compile time." + - desc: "Atomic floating-point min/max" + paper: P3008 lib: true ftm: - - name: __cpp_lib_constexpr_deque - value: 202502L - desc: "`constexpr` `std::deque`" - - name: __cpp_lib_constexpr_flat_map - value: 202502L - desc: "`constexpr` `std::flat_map`" - - name: __cpp_lib_constexpr_flat_set - value: 202502L - desc: "`constexpr` `std::flat_set`" - - name: __cpp_lib_constexpr_forward_list - value: 202502L - desc: "`constexpr` `std::forward_list`" - - name: __cpp_lib_constexpr_list - value: 202502L - desc: "`constexpr` `std::list`" - - name: __cpp_lib_constexpr_map - value: 202502L - desc: "`constexpr` `std::map`" - - name: __cpp_lib_constexpr_queue - value: 202502L - desc: "`constexpr` `std::queue`" - - name: __cpp_lib_constexpr_set - value: 202502L - desc: "`constexpr` `std::set`" - - name: __cpp_lib_constexpr_stack - value: 202502L - desc: "`constexpr` `std::stack`" - - name: __cpp_lib_constexpr_unordered_map - value: 202502L - desc: "`constexpr` `std::unordered_map`" - - name: __cpp_lib_constexpr_unordered_set - value: 202502L - desc: "`constexpr` `std::unordered_set`" + - name: __cpp_lib_atomic_min_max + value: 202506L - - desc: "`constexpr` `std::inplace_vector` for non-trivial types" - paper: P3074 + - desc: "Atomic reduction operations" + paper: P3111 lib: true ftm: - - name: __cpp_lib_constexpr_inplace_vector - value: 202502L + - name: __cpp_lib_atomic_reductions + value: 202506L - - desc: "`views::to_input()` (`ranges::to_input_view`)" - paper: P3137 - summary: "Convert any range to an input range." + - desc: "Add `std::views::indices(n)`" + paper: P3060 + summary: "Generate a range of indices from 0 to n-1." lib: true support: - - GCC 15 + - GCC 16 + - Clang 22 ftm: - - name: __cpp_lib_ranges_to_input - value: 202502L + - name: __cpp_lib_ranges_indices + value: 202506L - - desc: "`ranges::approximately_sized_range` and `ranges::reserve_hint()`" - paper: P2846 - summary: "Ranges can provide size hints for better allocation." + - desc: "Prevent path presentation problems" + paper: P2319 lib: true ftm: - - name: __cpp_lib_ranges_reserve_hint - value: 202502L + - name: __cpp_lib_format_path + value: 202506L - - desc: "`std::hive` (``)" - paper: P0447 - summary: "A container optimized for frequent insert/erase with stable iterators." - content: hive.md + - desc: "Making `std::istream::ignore` less surprising" + paper: P3223 lib: true - ftm: - - name: __cpp_lib_hive - value: 202502L - keywords: ["container"] + support: + - GCC 16 + - Clang 22 + - MSVC 14.50 - - desc: "Freestanding library: ``, ``, and ``" - paper: P2976 + - desc: "`std::constant_wrapper`" + paper: P2781 + summary: "Wrap compile-time constants as types for template metaprogramming." lib: true + support: + - GCC 16 ftm: - - name: __cpp_lib_freestanding_algorithm - value: 202502L - - name: __cpp_lib_freestanding_execution - value: 202502L - - name: __cpp_lib_freestanding_memory - value: 202502L - - name: __cpp_lib_freestanding_numeric - value: 202502L - - name: __cpp_lib_freestanding_random - value: 202502L + - name: __cpp_lib_constant_wrapper + value: 202506L - - desc: "Converting contiguous iterators to pointers" - paper: P3349 + - desc: "Minor additions to C++26 standard library hardening" + paper: P3697 lib: true support: - - GCC 15 - - MSVC 14.51 + - MSVC 14.50 (partial) + hints: + - target: MSVC 14.50 + msg: Partial support only due to the lack of Contracts. Support starting with Visual Studio 2026 18.0 Preview 2. ([GitHub Issue](https://github.com/microsoft/STL/pull/5650)) + keywords: ["safety"] - - desc: "Allow attaching `main()` to the global module" - paper: P3618 - support: - - GCC 16 - - Clang 21 + - desc: "Add a coroutine task type" + paper: P3552 + summary: "A standard coroutine task type for async operations." + lib: true + ftm: + - name: __cpp_lib_task + value: 202506L + + - desc: "Remove return type deduction in `std::apply()`" + paper: P1317 + lib: true + ftm: + - name: __cpp_lib_apply + value: 202506L - desc: "Wording for NB comment resolution on trivial relocation" paper: P3920 @@ -1682,6 +1682,10 @@ features: - Xcode lib: true + - desc: "Fix erroneous behaviour termination semantics for C++26" + paper: P3684 + keywords: ["safety"] + - desc: "Resolve inconsistencies in begin/end for `std::valarray` and braced initializer lists" paper: P3016 lib: true @@ -1788,7 +1792,3 @@ features: - desc: "Optimize for `std::optional` in range adaptors" paper: P3913 lib: true - - - desc: "Fix erroneous behaviour termination semantics for C++26" - paper: P3684 - keywords: ["safety"]