# C++ language support

Apple supports C++ with the Apple Clang compiler (included in Xcode) and the `libc++` C++ standard library runtime (included in SDKs and operating systems). The compiler and runtime are regularly updated to offer new functionality, including many leading-edge features specified by the ISO C++ standard.

- [Supported features](/content/xcode/cpp/#iso-c++standard-supported/index.html)
- [Library hardening](/content/xcode/cpp/#library-hardening/index.html)
- [Related resources](/content/xcode/cpp/#related-resources/index.html)

## Supported features

The following tables list support for ISO C++ standard features available on Apple platforms and in the Apple Clang compiler, as well as links to related documentation. While most features are supported by all Apple operating systems, some features depend on specific OS capabilities or require support in the libc++.dylib shared library provided with the OS. Code that uses those features should be guarded by the minimal deployment target check as noted.

### C++26 (expected)

| Feature | Paper | Notes |
| --- | --- | --- |
| Structured Bindings can introduce a Pack | [P1061R10](https://wg21.link/P1061R10/) | Requires Xcode 26.4 |
| Structured binding declaration as a condition | [P0963R3](https://wg21.link/P0963R3/) | Requires Xcode 26.4 |
| Variadic friends | [P2893R3](https://wg21.link/P2893R3/) | Requires Xcode 26.4 |
| The Oxford variadic comma | [P3176R1](https://wg21.link/P3176R1/) | Requires Xcode 26.4 |
| Unevaluated strings | [P2361R6](https://wg21.link/P2361R6/) | Requires Xcode 16.3 |
| `constexpr` cast from `void*` | [P2738R1](https://wg21.link/P2738R1/) | Requires Xcode 16.3 |
| On the ignorability of standard attributes | [P2552R3](https://wg21.link/P2552R3/) | Requires Xcode 16.3 |
| User-generated `static_assert` messages | [P2741R3](https://wg21.link/P2741R3/) | Requires Xcode 16.3 |
| Placeholder variables with no name | [P2169R4](https://wg21.link/P2169R4/) | Requires Xcode 16.3 |
| Template parameter initialization | [P2308R1](https://wg21.link/P2308R1/) | Requires Xcode 16.3 |
| Remove Deprecated Arithmetic Conversion on Enumerations | [P2864R2](https://wg21.link/P2864R2/) | Requires Xcode 16.3 |
| Clarifying rules for brace elision in aggregate initialization | [P3106R1](https://wg21.link/P3106R1/) | Requires Xcode 16.3 |
| Pack Indexing | [P2662R3](https://wg21.link/P2662R3/) | Requires Xcode 16.3 |
| \\= delete("should have a reason"); | [P2573R2](https://wg21.link/P2573R2/) | Requires Xcode 16.3 |
| Attributes for Structured Bindings | [P0609R3](https://wg21.link/P0609R3/) | Requires Xcode 16.3 |
| Disallow Binding a Returned Glvalue to a Temporary | [P2748R5](https://wg21.link/P2748R5/) | Requires Xcode 16.3 |
| Trivial infinite loops are not Undefined Behavior | [P2809R3](https://wg21.link/P2809R3/) | Requires Xcode 16.3 |
| Deleting a Pointer to an Incomplete Type Should be Ill-formed | [P3144R2](https://wg21.link/P3144R2/) | Requires Xcode 16.3 |
| Ordering of constraints involving fold expressions | [P2963R3](https://wg21.link/P2963R3/) | Requires Xcode 16.3 |
| Remove undefined behavior from lexing | [P2621R2](https://wg21.link/P2621R2/) ( [DR](https://clang.llvm.org/cxx_status.html#dr)) | Requires Xcode 16 |
| Making non-encodable string literals ill-formed | [P1854R4 (](https://wg21.link/P1854R4/) [DR](https://clang.llvm.org/cxx_status.html#dr)) | Requires Xcode 16 |
| Add @, $, and \` to the basic character set | [P2558R2](https://wg21.link/P2558R2/) | Requires Xcode 15 or later |
| Unevaluated strings | [P2361R6](https://wg21.link/P2361R6/) | Requires Xcode 16 |
| Features implemented in the libc++ library |
| `constexpr` Stable Sorting | [P2562R1](https://wg21.link/P2562R1/) | Requires Xcode 26.4 |
| Put `std::monostate` in `<utility>` | [P0472R3](https://wg21.link/P0472R3/) | Requires Xcode 26.4 |
| `aligned_accessor`: An `mdspan` accessor expressing pointer over-alignment | [P2897R7](https://wg21.link/P2897R7/) | Requires Xcode 26.4 |
| Deprecate the notion of trivial types | [P3247R2](https://wg21.link/P3247R2/) | Requires Xcode 26.4 |
| `constexpr` containers and adaptors (`forward_list`, `list`, `priority_queue`, `flat_map`, and `flat_set` are implemented) | [P3372R3](https://wg21.link/P3372R3/) | Requires Xcode 26.4 |
| `constexpr` placement new | [P2747R2](https://wg21.link/P2747R2/) | Requires Xcode 26.4 |
| A type trait for detecting virtual base classes | [P2985R0](https://wg21.link/P2985R0/) | Requires Xcode 26 |
| Concatenation of `strings` and `string_views` | [P2591R5](https://wg21.link/P2591R5/) | Requires Xcode 16.3 |
| Member `visit` | [P2637R3](https://wg21.link/P2637R3/) | Requires Xcode 16.3 |
| Printing Blank Lines with `println` | [P3142R0](https://wg21.link/P3142R0/) | Requires Xcode 16.3 |
| Interfacing `stringstreams` with `string_view` | [P2495R3](https://wg21.link/P2495R3/) | Requires Xcode 16.3 |
| Add `tuple` protocol to `complex` | [P2819R2](https://wg21.link/P2819R2/) | Requires Xcode 16.3 |
| Testing for success or failure of `<charconv>` functions | [P2497R0](https://wg21.link/P2497R0/) | Requires Xcode 16 |
| ADL-proof `std::projected` | [P2538R1](https://wg21.link/P2538R1/) | Requires Xcode 16 |
| Native handles and file streams | [P1759R6](https://wg21.link/P1759R6/) | Requires Xcode 16 |
| Interfacing `bitset` with `string_view` | [P2697R1](https://wg21.link/P2697R1/) | Requires Xcode 16 |
| Saturation arithmetic | [P0543R3](https://wg21.link/P0543R3/) | Requires Xcode 16 |
| Runtime format strings | [P2905R2](https://wg21.link/P2905R2/) | Requires Xcode 16 |
| Runtime format strings II | [P2918R2](https://wg21.link/P2918R2/) | Requires Xcode 16 |
| Fix formatting of code units as integers (Dude, where’s my `char?`) | [P2909R4](https://wg21.link/P2909R4/) | Requires Xcode 16 |
| `std::span` over an initializer list | [P2447R6](https://wg21.link/P2447R6/) | Requires Xcode 16 |
| `span.at()` | [P2821R5](https://wg21.link/P2821R5/) | Requires Xcode 16 |
| Remove Deprecated `std::allocator` Typedef From C++26 | [P2868R3](https://wg21.link/P2868R3/) | Requires Xcode 16 |
| Remove `basic_string::reserve()` From C++26 | [P2870R3](https://wg21.link/P2870R3/) | Requires Xcode 16 |
| Remove Deprecated Unicode Conversion Facets from C++26 | [P2871R3](https://wg21.link/P2871R3/) | Requires Xcode 16 |

### C++23

| Feature | Paper | Notes |
| --- | --- | --- |
| Deducing `this` | [P0847R7](https://wg21.link/P0847R7/) | Requires Xcode 16.3 |
| Change scope of lambda trailing-return-type | [P2036R3](https://wg21.link/P2036R3/) | Requires Xcode 16.3 |
| Relaxing some `constexpr` restrictions | [P2448R2](https://wg21.link/P2448R2/) | Requires Xcode 16.3 |
| A type trait to detect reference binding to temporary | [P2255R2](https://wg21.link/P2255R2/) | Requires Xcode 16.3 |
| Static and explicit object member functions with the same parameter-type-lists | [P2797R0](https://wg21.link/P2797R0/) | Requires Xcode 16.3 |
| The Equality Operator You Are Looking For | [P2468R2](https://wg21.link/P2468R2/) | Requires Xcode 16 |
| Labels at the end of compound statements | [P2324R2](https://wg21.link/P2324R2/) | Requires Xcode 16 |
| static `operator()` | [P1169R4](https://wg21.link/P1169R4/) | Requires Xcode 16 |
| `char8_t` Compatibility and Portability Fix | [P2513R3](https://wg21.link/P2513R3/) | Requires Xcode 16 |
| static `operator[]` | [P2589R1](https://wg21.link/P2589R1/) | Requires Xcode 16 |
| Permitting `static constexpr` variables in `constexpr` functions | [P2647R1](https://wg21.link/P2647R1/) | Requires Xcode 16 |
| consteval needs to propagate up | [P2564R3](https://wg21.link/P2564R3/)( [DR](https://clang.llvm.org/cxx_status.html#dr)) | Requires Xcode 16 |
| Referencing The Unicode Standard | [P2736R2](https://wg21.link/P2736R2/) | Requires Xcode 16 |
| De-deprecating `volatile` compound operations. | [P2327R1](https://wg21.link/P2327R1/) | Requires Xcode 15 or later |
| Support for `#warning` | [P2437R1](https://wg21.link/P2437R1/) | Requires Xcode 15 or later |
| Remove non-encodable wide character literals and multicharacter wide character literals | [P2362R3](https://wg21.link/P2362R3/) | Requires Xcode 15 or later |
| Delimited escape sequences | [P2290R3](https://wg21.link/P2290R3/) | Requires Xcode 15 or later |
| Named universal character escapes | [P2071R2](https://wg21.link/P2071R2/) | Requires Xcode 15 or later |
| Support for UTF-8 as a portable source file encoding | [P2295R6](https://wg21.link/P2295R6/) | Requires Xcode 15 or later |
| Relax requirements on `wchar_t` to match existing practices | [P2460R2](https://wg21.link/P2460R2/) | Requires Xcode 15 or later |
| Multidimensional subscript operator | [P2128R6](https://wg21.link/P2128R6/) | Requires Xcode 14.3 or later |
| Non-literal variables (and labels and gotos) in `constexpr` functions | [P2242R3](https://wg21.link/P2242R3/) | Requires Xcode 14.3 or later |
| `auto(x):` decay-copy in the language | [P0849R8](https://wg21.link/P0849R8/) | Requires Xcode 14.3 or later |
| Literal suffix `uz, z` for `size_t`, `ssize_t` | [P0330R8](https://wg21.link/P0330R8/) |  |
| Make `()` in lambdas optional in all cases | [P1102R2](https://wg21.link/P1102R2/) |  |
| `if consteval` | [P1938R3](https://wg21.link/P1938R3/) |  |
| Allow duplicate attributes | [P2156R1](https://wg21.link/P2156R1/) |  |
| Narrowing contextual conversions to `bool` | [P1401R5](https://wg21.link/P1401R5/) |  |
| Trimming whitespaces before line splicing | [P2223R2](https://wg21.link/P2223R2/) |  |
| C++ identifier syntax using unicode standard annex 31 | [P1949R7](https://wg21.link/P1949R7/) |  |
| Mixed `string` literal concatenation | [P2201R1](https://wg21.link/P2201R1/) |  |
| Character sets and encodings | [P2314R4](https://wg21.link/P2314R4/) |  |
| Consistent character literal encoding | [P2316R2](https://wg21.link/P2316R2/) |  |
| Preprocessing directives `elifdef` and `elifndef` | [P2334R1](https://wg21.link/P2334R1/) |  |
| Extend init-statement to allow alias-declaration | [P2360R0](https://wg21.link/P2360R0/) |  |
| Attributes on lambda expressions | [P2173R1](https://wg21.link/P2173R1/) |  |
| Make declaration order layout mandated | [P1847R4](https://wg21.link/P1847R4/) |  |
| Features implemented in the libc++ library |
| A type trait to detect reference binding to temporary (implemented the type traits only) | [P2255R2](https://wg21.link/P2255R2/) | Requires Xcode 26.4 |
| A Standard `flat_set` | [P1222R4](https://wg21.link/P1222R4/) | Requires Xcode 26.4 |
| `views::join_with` | [P2441R2](https://wg21.link/P2441R2/) | Requires Xcode 26.4 |
| Stashing stashing iterators for proper flattening | [P2770R0](https://wg21.link/P2770R0/) | Requires Xcode 26.4 |
| `common_reference_t` of `reference_wrapper` Should Be a Reference Type | [P2655R3](https://wg21.link/P2655R3/) | Requires Xcode 26.4 |
| Relaxing Ranges Just A Smidge | [P2609R3](https://wg21.link/P2609R3/) | Requires Xcode 26 |
| A trait for implicit lifetime types | [P2674R1](https://wg21.link//) | Requires Xcode 26 |
| A Standard `flat_map` | [P0429R9](https://wg21.link/P2674R1/) | Requires Xcode 26 |
| Pipe support for user-defined range adaptors | [P2387R3](https://wg21.link/P2387R3/) | Requires Xcode 16.3 |
| `out_ptr` \- a scalable output pointer abstraction | [P1132R8](https://wg21.link/P1132R8/) | Requires Xcode 16.3 |
| `std::ranges::contains_subrange (std::ranges::contains` has been implemented in a previous release) | [P2302R4](https://wg21.link/P2302R4/) | Requires Xcode 16.3 |
| `ranges::find_last(), ranges::find_last_if()`, and `anges::find_last_if_not()` | [P1223R5](https://wg21.link/P1223R5/) | Requires Xcode 16.3 |
| Poison Pills are Too Toxic | [P2602R2](https://wg21.link/P2602R2/) | Requires Xcode 16.3 |
| `starts_with` and `ends_with` | [P1659R3](https://wg21.link/P1659R3/) | Requires Xcode 16 |
| `views::chunk_by` | [P2443R1](https://wg21.link/P2443R1/) | Requires Xcode 16 |
| `std::ranges::contains` | [P2302R4](https://wg21.link/P2302R4/) | Requires Xcode 16<br>**Not supported:**`std::ranges::contains_subrange` |
| Support exclusive mode for `fstreams` | [P2467R1](https://wg21.link/P2467R1/) | Requires Xcode 16 |
| Add a conditional `noexcept` specification to `std::apply` | [P2517R1](https://wg21.link/P2517R1/) | Requires Xcode 16 |
| Should the output of `std::print` to a terminal be synchronized with the underlying stream? | [P2539R4](https://wg21.link/P2539R4/) | Requires Xcode 16 |
| Deprecate `numeric_limits::has_denorm` | [P2614R2](https://wg21.link/P2614R2/) | Requires Xcode 16 |
| Formatting ranges | [P2286R8](https://wg21.link/P2286R8/) | Requires Xcode 15.3 or later |
| `ranges::to` : A function to convert any range to a container | [P1206R7](https://wg21.link/P1206R7/) | Requires Xcode 15.3 or later |
| `move_iterator<T*>` should be a random access iterator | [P2520R0](https://wg21.link/P2520R0/) | Requires Xcode 15.3 or later |
| `constexpr type_info::operator==()` | [P1328R1](https://wg21.link/P1328R1/) | Requires Xcode 15.3 or later |
| Formatting `thread::id` | [P2693R1](https://wg21.link/P2693R1/) | Requires Xcode 15.3 or later |
| Monadic operations for `std::expected` | [P2505R5](https://wg21.link/P2505R5/) | Requires Xcode 15.3 or later |
| Making multi-param constructors of views explicit | [P2711R1](https://wg21.link/P2711R1/) | Requires Xcode 15.3 or later |
| `std::invoke_r` | [P2136R3](https://wg21.link/P2136R3/) | Requires Xcode 15.3 or later |
| Relaxing range adaptors to allow for move only types | [P2494R2](https://wg21.link/P2494R2/) | Requires Xcode 15.3 or later |
| Improving default container formatting | [P2585R1](https://wg21.link/P2585R1/) | Requires Xcode 15.3 or later |
| `std::ranges::views::repeat` | [P2474R2](https://wg21.link/P2474R2/) | Requires Xcode 15.3 or later |
| `std::mdspan` | [P0009R18](https://wg21.link/P0009R18/) | Requires Xcode 15.3 or later |
| Formatted output | [P2093R14](https://wg21.link/P2093R14/) | Requires Xcode 15.3 or later |
| Add the missing `empty` to `mdspan` | [P2613R1](https://wg21.link/P2613R1/) | Requires Xcode 15.3 or later |
| `mdspan:` rename pointer and contiguous | [P2604R0](https://wg21.link/P2604R0/) | Requires Xcode 15.3 or later |
| `string_view` range constructor should be `explicit` | [P2499R0](https://wg21.link/P2499R0/) | Requires Xcode 15 or later |
| A more `constexpr bitset` | [P2417R2](https://wg21.link/P2417R2/) | Requires Xcode 15 or later |
| `forward_like` | [P2445R1](https://wg21.link/P2445R1/) | Requires Xcode 15 or later |
| Making `std::unique_ptr` constexpr | [P2273R3](https://wg21.link/P2273R3/) | Requires Xcode 15 or later |
| Add constexpr modifiers to functions `to_chars` and `from_chars` for integral types in `<charconv>` header | [P2291R3](https://wg21.link/P2291R3/) | Requires Xcode 15 or later |
| `std::string::substr() &&` | [P2438R2](https://wg21.link/P2438R2/) | Requires Xcode 15 or later |
| `std::expected` | [P0323R12](https://wg21.link/P0323R12/) | Requires Xcode 15 or later |
| `views::as_rvalue` | [P2446R2](https://wg21.link/P2446R2/) | Requires Xcode 15 or later |
| `std::unexpected` should have `error()` as member accessor | [P2549R1](https://wg21.link/P2549R1/) | Requires Xcode 15 or later |
| Conditionally borrowed ranges | [P2017R1](https://wg21.link/P2017R1/) | Requires Xcode 15 or later |
| Function to mark unreachable code `std::unreachable()` | [P0627R6](https://wg21.link/P0627R6/) | Requires Xcode 14.3 or later |
| Type trait to detect scoped enumerations `std::is_scoped_enum` | [P1048R1](https://wg21.link/P1048R1/) |  |
| `contains()` function for `basic_string` and `basic_string_view` | [P1679R3](https://wg21.link/P1679R3/) |  |
| `std::to_underlying` for enumerations | [P1682R3](https://wg21.link/P1682R3/) |  |
| `std::visit()` for classes derived from `std::variant` | [P2162R2](https://wg21.link/P2162R2/) |  |
| Prevent overconstraining allocators in container deduction guides | [P1518R2](https://wg21.link/P1518R2/) |  |
| Prohibit `basic_string` and `basic_string_view` construction from `nullptr` | [P2166R1](https://wg21.link/P2166R1/) |  |
| Require `span` & `basic_string_view` to be trivially copyable | [P2251R1](https://wg21.link/P2251R1/) |  |

### C++20

| Feature | Paper | Notes |
| --- | --- | --- |
| Class types as non-type template parameters | [P0732R2](https://wg21.link/P0732R2/) | Requires Xcode 16.3 |
| Immediate functions `(consteval)` | [P1073R3](https://wg21.link/P1073R3/) | Requires Xcode 16.3 |
| `typename` optional in more contexts | [P0634R3](https://wg21.link/P0634R3/) | Requires Xcode 16 |
| Structured binding extensions | [P1091R3](https://wg21.link/P1091R3/) | Requires Xcode 16 |
| [P1381R1](https://wg21.link/P1381R1/) |
| Parenthesized initialization of aggregates | [P0960R3](https://wg21.link/P0960R3/) | Requires Xcode 16 |
| [P1975R0](https://wg21.link/P1975R0/) |
| [Concepts](/content/videos/play/wwdc2022/110367/index.html) | [P0734R0](https://wg21.link/P0734R0/) | **Not supported:** papers [P2103R0](https://wg21.link/P2103R0/), [DR1496](https://wg21.link/DR1496/), [DR1734](https://wg21.link/DR1734/), [P0848R3](https://wg21.link/P0848R3/) |
| [P1084R2](https://wg21.link/P1084R2/) |
| [P1141R2](https://wg21.link/P1141R2/) |
| [P1616R1](https://wg21.link/P1616R1/) |
| [P1452R2](https://wg21.link/P1452R2/) |
| [P1972R0](https://wg21.link/P1972R0/) |
| [P1980R0](https://wg21.link/P1980R0/) |
| [P2493R0](https://wg21.link/P2493R0/) |
| [P2092R0](https://wg21.link/P2092R0/) |
| Immediate functions (`consteval`) | [P1073R3](https://wg21.link/P1073R3/) | Requires Xcode 15 or later |
| [P1937R2](https://wg21.link/P1937R2/) |
| Default member initializers for bit-fields | [P0683R1](https://wg21.link/P0683R1/) |  |
| Fix `const`-qualified (`const&`-qualified) pointers to members | [P0704R1](https://wg21.link/P0704R1/) |  |
| Allow lambda-capture `[=, this]` | [P0409R2](https://wg21.link/P0409R2/) |  |
| `__VA_OPT__` for comma omission and comma deletion | [P0306R4](https://wg21.link/P0306R4/) |  |
| [P1042R1](https://wg21.link/P1042R1/) |
| Designated initializers | [P0329R4](https://wg21.link/P0329R4/) |  |
| Familiar template-parameter-list syntax for generic lambdas | [P0428R2](https://wg21.link/P0428R2/) |  |
| Range-based `for` statements with initializer | [P0614R1](https://wg21.link/P0614R1/) |  |
| ADL and function templates that are not visible | [P0846R0](https://wg21.link/P0846R0/) |  |
| `const` mismatch with defaulted copy constructor | [P0641R2](https://wg21.link/P0641R2/) |  |
| Consistent comparison (`operator<=>`) | [P0515R3](https://wg21.link/P0515R3/) |  |
| [P0905R1](https://wg21.link/P0905R1/) |
| [P1120R0](https://wg21.link/P1120R0/) |
| [P1185R2](https://wg21.link/P1185R2/) |
| [P1186R3](https://wg21.link/P1186R3/) |
| [P1630R1](https://wg21.link/P1630R1/) |
| [P1946R0](https://wg21.link/P1946R0/) |
| [P1959R0](https://wg21.link/P1959R0/) |
| [P2085R0](https://wg21.link/P2085R0/) |
| Relaxing access checking on specializations | [P0692R1](https://wg21.link/P0692R1/) |  |
| Default constructible and assignable stateless lambdas | [P0624R2](https://wg21.link/P0624R2/) |  |
| Allowing lambdas in unevaluated contexts | [P0315R4](https://wg21.link/P0315R4/) | **Not supported:** \[temp.deduct/9\] |
| `[[no_unique_address]]` attribute | [P0840R2](https://wg21.link/P0840R2/) |  |
| `[[likely]]` and `[[unlikely]]` attributes | [P0479R5](https://wg21.link/P0479R5/) |  |
| Pack expansion in lambda init-capture | [P0780R2](https://wg21.link/P0780R2/) |  |
| Relaxations of `constexpr` restrictions | [P1064R0](https://wg21.link/P1064R0/) |  |
| [P1002R1](https://wg21.link/P1002R1/) |
| [P1327R1](https://wg21.link/P1327R1/) |
| [P1330R0](https://wg21.link/P1330R0/) |
| [P1331R2](https://wg21.link/P1331R2/) |
| [P1668R1](https://wg21.link/P1668R1/) |
| [P0784R7](https://wg21.link/P0784R7/) |
| Prohibit aggregates with user-declared constructors | [P1008R1](https://wg21.link/P1008R1/) |  |
| Feature test macros | [P0941R2](https://wg21.link/P0941R2/) |  |
| `explicit(bool):` conditionally explicit constructor | [P0892R2](https://wg21.link/P0892R2/) |  |
| Signed integers are two’s complement | [P1236R1](https://wg21.link/P1236R1/) |  |
| `char8_t:` A type for UTF-8 characters and strings | [P0482R6](https://wg21.link/P0482R6/) |  |
| `std::is_constant_evaluated` | [P0595R2](https://wg21.link/P0595R2/) |  |
| Nested inline namespaces | [P1094R2](https://wg21.link/P1094R2/) |  |
| Stronger unicode requirements | [P1041R4](https://wg21.link/P1041R4/) |  |
| [P1139R2](https://wg21.link/P1139R2/) |
| Coroutines | [P0912R5](https://wg21.link/P0912R5/) |  |
| Deprecate comma operator in subscripting expressions like `a[b,c]` | [P1161R3](https://wg21.link/P1161R3/) |  |
| Deprecate some problematic uses of `volatile` | [P1152R4](https://wg21.link/P1152R4/) |  |
| `[[nodiscard("with reason")]]` | [P1301R4](https://wg21.link/P1301R4/) |  |
| using `enum` | [P1099R5](https://wg21.link/P1099R5/) |  |
| Permit conversions to arrays of unknown bound | [P0388R4](https://wg21.link/P0388R4/) |  |
| `constinit` | [P1143R2](https://wg21.link/P1143R2/) |  |
| Pseudo-destructors end object lifetimes | [P0593R6](https://wg21.link/P0593R6/) ( [DR](https://clang.llvm.org/cxx_status.html#dr)) |  |
| Implicit move for more local objects and rvalue references | [P1825R0](https://wg21.link/P1825R0/) ( [DR](https://clang.llvm.org/cxx_status.html#dr)) |  |
| Features implemented in the libc++library |
| Deprecate POD | [P0767R1](https://wg21.link/P0767R1/) | Requires Xcode 26.4 |
| Integration of `chrono` with text formatting | [P1361R2](https://wg21.link/P1361R2/) | Requires Xcode 26.4 |
| Fixing locale handling in `chrono` formatters | [P2372R3](https://wg21.link/P2372R3/) | Requires Xcode 26.4 |
| Reviewing Deprecated Facilities of C++17 for C++20 | [P0619R4](https://wg21.link/P0619R4/) | Requires Xcode 26 |
| The Mothership has Landed: Adding <=> to the Library | [P1614R2](https://wg21.link/P1614R2/) | Requires Xcode 16.3 |
| Symmetry for spaceship | [P0905R1](https://wg21.link/P0905R1/) | Requires Xcode 16.3 |
| `std::atomic_ref` | [P0019R8](https://wg21.link/P0019R8/) | Requires Xcode 16.3 |
| Add `wait/notify` to `atomic_ref<T>` | [P1643R1](https://wg21.link/P1643R1/) | Requires Xcode 16.3 |
| Missing constexpr in `std::optional` and `std::variant` | [P2231R1](https://wg21.link/P2231R1/) | Requires Xcode 16.3 |
| Floating Point Atomic | [P0020R6](https://wg21.link/P0020R6/) | Requires Xcode 16 |
| Text formatting `(std::format)` | [P0645R10](https://wg21.link/P0645R10/) | Requires Xcode 15.3 or later |

| Efficient access to `basic_stringbuf`’s buffer | [P0408R7](https://wg21.link/P0408R7/) | Requires Xcode 15.3 or later |
| Utility functions to implement uses-allocator construction | [P0591R4](https://wg21.link/P0591R4/) | Requires Xcode 15 or later |
| `char8_t:` A type for UTF-8 characters and strings | [P0482R6](https://wg21.link/P0482R6/) | Requires Xcode 15 or later |
| `nodiscard` in the Library | [P0600R1](https://wg21.link/P0600R1/) | Requires Xcode 15 or later |
| `polymorphic_allocator<>` as a vocabulary type | [P0339R6](https://wg21.link/P0339R6/) | Requires Xcode 15 or later |
| Constexpr for `std::complex` | [P0415R1](https://wg21.link/P0415R1/) | Requires Xcode 15 or later |
| Adopt `source_location` for C++20 | [P1208R6](https://wg21.link/P1208R6/) | Requires Xcode 15 or later |
| Input Range Adaptors | [P1035R7](https://wg21.link/P1035R7/) | Requires Xcode 15 or later |
| Views should not be required to be default constructible | [P2325R3](https://wg21.link/P2325R3/) | Requires Xcode 15 or later |
| Smart pointer creation with default initialization | [P1020R1](https://wg21.link/P1020R1/) | Requires Xcode 15 or later |
| Superior String Splitting | [P2210R2](https://wg21.link/P2210R2/) | Requires Xcode 15 or later |
| `basic_istream_view::iterator` should not be copyable | [P1638R1](https://wg21.link/P1638R1/) | Requires Xcode 15 or later |
| Output `std::chrono::days` with ‘d’ suffix | [P1650R0](https://wg21.link/P1650R0/) | Requires Xcode 15 or later |
| Ranges adaptors for non-copyable iterators | [P1862R1](https://wg21.link/P1862R1/) | Requires Xcode 15 or later |
| Rename `“_default_init”` Functions, Rev1 | [P1973R1](https://wg21.link/P1973R1/) | Requires Xcode 15 or later |
| `elements_view` needs its own sentinel | [P1994R1](https://wg21.link/P1994R1/) | Requires Xcode 15 or later |
| Fix `istream_view` | [P2432R1](https://wg21.link/P2432R1/) | Requires Xcode 15 or later |
| Making `std::vector` constexpr | [P1004R2](https://wg21.link/P1004R2/) | Requires Xcode 14.3 or later |
| Consistent stateful allocator propagation for `operator+(basic_string)` | [P1165R1](https://wg21.link/P1165R1/) | Requires Xcode 14.3 or later |
| Support arrays in `make_shared` and `allocate_shared` | [P0674R1](https://wg21.link/P0674R1/) | Requires Xcode 14.3 or later |
| Making `std::string` constexpr | [P0980R1](https://wg21.link/P0980R1/) | Requires Xcode 14.3 or later |
| Consider `ATOMIC_FLAG_INIT` undeprecation | [LWG3659](https://wg21.link/LWG3659/) | Requires Xcode 14.3 or later |
| `char8_t` backward compatibility remediation | [P1423R3](https://wg21.link/P1423R3/) | Requires Xcode 14.3 or later |
| Bit-casting object representations | [P0476R2](https://wg21.link/P0476R2/) | Requires Xcode 14.3 or later |
| Ranges | [P0896R4](https://wg21.link/P0896R4/) | Requires Xcode 14.3 or later |
| [P2415R2](https://wg21.link/P2415R2/) | Requires Xcode 14.3 or later |
| [P2281R1](https://wg21.link/P2281R1/) | Requires Xcode 14.3 or later |
| `std::endian` | [P0463R1](https://wg21.link/P0463R1/) |  |
| Add `constexpr` modifiers to functions in `<algorithm>` and `<utility>` headers | [P0202R3](https://wg21.link/P0202R3/) |  |
| Make `std::memory_order` a scoped enumeration | [P0439R0](https://wg21.link/P0439R0/) |  |
| String prefix and suffix checking | [P0457R2](https://wg21.link/P0457R2/) |  |
| Transformation trait `remove_cvref` | [P0550R2](https://wg21.link/P0550R2/) |  |
| De-pessimize legacy `<numeric>` algorithms with `std::move` | [P0616R0](https://wg21.link/P0616R0/) |  |
| Utility to convert a pointer to a raw pointer | [P0653R2](https://wg21.link/P0653R2/) |  |
| Deprecate `is_pod` | [P0767R1](https://wg21.link/P0767R1/) |  |
| Library support for the spaceship (comparison) operator `<=>` | [P0768R1](https://wg21.link/P0768R1/) |  |
| Treating unnecessary decay | [P0777R1](https://wg21.link/P0777R1/) |  |
| `<span>` | [P0122R7](https://wg21.link/P0122R7/) |  |
| Thou shalt not specialize `std` function templates! | [P0551R3](https://wg21.link/P0551R3/) |  |
| `<version>` | [P0754R2](https://wg21.link/P0754R2/) |  |
| Comparing unordered containers | [P0809R0](https://wg21.link/P0809R0/) |  |
| Constexpr iterator requirements | [P0858R0](https://wg21.link/P0858R0/) |  |
| `string::reserve` should not shrink | [P0966R1](https://wg21.link/P0966R1/) |  |
| Checking for existence of an element in associative containers | [P0458R2](https://wg21.link/P0458R2/) |  |
| Guaranteed copy elision for piecewise construction | [P0475R1](https://wg21.link/P0475R1/) |  |
| Integral power-of-2 operations | [P0556R3](https://wg21.link/P0556R3/) |  |
| Reviewing deprecated facilities of C++17 for C++20 | [P0619R4](https://wg21.link/P0619R4/) | **Not supported:** P0619, Sections D.4, D.7, D.11, and D.12 |
| Improving the return value of erase-like algorithms | [P0646R1](https://wg21.link/P0646R1/) |  |
| Efficient sized delete for variable sized classes | [P0722R3](https://wg21.link/P0722R3/) |  |
| Implicit conversion traits and utility functions | [P0758R1](https://wg21.link/P0758R1/) |  |
| `fpos` requirements | [P0759R1](https://wg21.link/P0759R1/) |  |
| Add shift to `<algorithm>` | [P0769R2](https://wg21.link/P0769R2/) |  |
| `constexpr` for swap and swap related functions | [P0879R0](https://wg21.link/P0879R0/) |  |
| The identity metafunction | [P0887R1](https://wg21.link/P0887R1/) |  |
| Standard library concepts | [P0898R3](https://wg21.link/P0898R3/) |  |
| Eradicating unnecessarily explicit default constructors | [P0935R0](https://wg21.link/P0935R0/) |  |
| `constexpr` comparison operators for `std::array` | [P1023R0](https://wg21.link/P1023R0/) |  |
| `std::unwrap_ref_decay` and `std::unwrap_reference` | [P0318R1](https://wg21.link/P0318R1/) |  |
| Simplified partial function application | [P0356R5](https://wg21.link/P0356R5/) |  |
| Supporting Incomplete types In `reference_wrapper` | [P0357R3](https://wg21.link/P0357R3/) |  |
| Fixing `operator>>(basic_istream&, CharT*)` | [P0487R1](https://wg21.link/P0487R1/) |  |
| `std::is_constant_evaluated()` | [P0595R2](https://wg21.link/P0595R2/) |  |
| Variant and optional should propagate copy/move triviality | [P0602R4](https://wg21.link/P0602R4/) |  |
| Improving variant’s Converting Constructor/Assignment | [P0608R3](https://wg21.link/P0608R3/) |  |
| `visit<R>:` explicit return type for visit | [P0655R1](https://wg21.link/P0655R1/) |  |
| `std::function` move constructor should be `noexcept` | [P0771R1](https://wg21.link/P0771R1/) |  |
| Heterogeneous lookup for unordered containers | [P0919R3](https://wg21.link/P0919R3/) |  |
| `<chrono> zero(), min(), and max()` should be `noexcept` | [P0972R0](https://wg21.link/P0972R0/) |  |
| `constexpr` in `std::pointer_traits` | [P1006R1](https://wg21.link/P1006R1/) |  |
| Misc `constexpr` bits | [P1032R1](https://wg21.link/P1032R1/) |  |
| Remove comparison operators of `std::span` | [P1085R2](https://wg21.link/P1085R2/) |  |
| Adopt consistent container erasure from library fundamentals 2 | [P1209R0](https://wg21.link/P1209R0/) |  |
| Remove `CommonReference` requirement from `StrictWeakOrdering` | [P1248R1](https://wg21.link/P1248R1/) |  |
| Making `std::underlying_type` SFINAE-friendly | [P0340R3](https://wg21.link/P0340R3/) |  |
| Well-behaved interpolation for numbers and pointers | [P0811R3](https://wg21.link/P0811R3/) |  |
| Usability enhancements for `std::span` | [P1024R3](https://wg21.link/P1024R3/) |  |
| Make `create_directory()` intuitive | [P1164R1](https://wg21.link/P1164R1/) |  |
| `signed ssize()` functions, `unsigned size()` functions | [P1227R2](https://wg21.link/P1227R2/) |  |
| Traits for \[Un\]bounded Arrays | [P1357R1](https://wg21.link/P1357R1/) |  |
| Mandating the standard library: Clause 16 - Language support library | [P1458R1](https://wg21.link/P1458R1/) |  |
| Mandating the standard library Clause 18 - Diagnostics library | [P1459R1](https://wg21.link/P1459R1/) |  |
| Mandating the standard library: Clause 20 - Strings library | [P1462R1](https://wg21.link/P1462R1/) |  |
| Mandating the standard library: Clause 22 - Iterators library | [P1464R1](https://wg21.link/P1464R1/) |  |
| `to_array` from LFTS with updates | [P0325R4](https://wg21.link/P0325R4/) |  |
| Bit operations | [P0553R4](https://wg21.link/P0553R4/) |  |
| Math constants | [P0631R8](https://wg21.link/P0631R8/) |  |
| More `onstexpr` containers | [P0784R7](https://wg21.link/P0784R7/) |  |
| `constexpr` invoke | [P1065R2](https://wg21.link/P1065R2/) |  |
| Synchronization library (`<barrier>`, `<latch>`, `<semaphore>` and notification functions on `std::atomic`) | [P1135R6](https://wg21.link/P1135R6/) | **Minimum deployment target:**<br>macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0 |
| Exposing a narrow contract for ceil2 | [P1355R2](https://wg21.link/P1355R2/) |  |
| Relocate endian’s specification | [P1612R1](https://wg21.link/P1612R1/) |  |
| `bind_front` should not unwrap `reference_wrapper` | [P1651R0](https://wg21.link/P1651R0/) |  |
| Remove dedicated precalculated hash lookup interface | [P1661R1](https://wg21.link/P1661R1/) |  |
| Fixing atomic initialization | [P0883R2](https://wg21.link/P0883R2/) |  |
| Range constructor for `std::string_view` | [P1391R4](https://wg21.link/P1391R4/) |  |
| Range constructor for `std::span` | [P1394R4](https://wg21.link/P1394R4/) |  |
| `constexpr` for numeric algorithms | [P1645R1](https://wg21.link/P1645R1/) |  |
| Heterogeneous lookup for unordered containers | [P1690R1](https://wg21.link/P1690R1/) |  |
| Add `max()` to latch and barrier | [P1865R1](https://wg21.link/P1865R1/) | **Minimum deployment target:**<br>macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0 |
| Concept traits should be named after concepts | [P1871R1](https://wg21.link/P1871R1/) |  |
| `span` should have `size_type`, not `index_type` | [P1872R0](https://wg21.link/P1872R0/) |  |
| Remove `std::weak_equality` and `std::strong_equality` | [P1959R0](https://wg21.link/P1959R0/) |  |
| Safe integral comparisons | [P0586R2](https://wg21.link/P0586R2/) |  |
| Improving the return value of erase-like algorithms II: free erase/erase if | [P1115R3](https://wg21.link/P1115R3/) |  |
| On the names of low-level bit manipulation functions | [P1956R1](https://wg21.link/P1956R1/) |  |
| Wording for `boolean-testable` | [P1964R2](https://wg21.link/P1964R2/) |  |
| Fixed-size `span` construction from dynamic range | [P1976R2](https://wg21.link/P1976R2/) |  |
| Remove tuple-like protocol support from fixed-extent span | [P2116R0](https://wg21.link/P2116R0/) |  |
| Missing constexpr in `std::optional` and `std::variant` | [P2231R1](https://wg21.link/P2231R1/) | **Not supported:** changes to std::variant |

### C++17

| Feature | Paper | Notes |
| --- | --- | --- |
| `static_assert` with no message | [N3928](https://wg21.link/N3928/) |  |
| Removing trigraphs | [N4086](https://wg21.link/N4086/) |  |
| `typename` in a template template parameter | [N4051](https://wg21.link/N4051/) |  |
| New `auto` rules for direct-list-initialization | [N3922](https://wg21.link/N3922/) |  |
| Fold expressions | [N4295](https://wg21.link/N4295/) |  |
| [P0036R0](https://wg21.link/P0036R0/) |
| `u8` character literals | [P0036R0](https://wg21.link/P0036R0/) |  |
| Nested namespace definition | [N4230](https://wg21.link/N4230/) |  |
| Attributes for namespaces and enumerators | [N4266](https://wg21.link/N4266/) |  |
| Allow constant evaluation for all non-type template arguments | [N4268](https://wg21.link/N4268/) |  |
| Remove deprecated `register` storage class | [P0001R1](https://wg21.link/P0001R1/) |  |
| Remove deprecated `bool` increment | [P0002R1](https://wg21.link/P0002R1/) |  |
| Make exception specifications part of the type system | [P0012R1](https://wg21.link/P0012R1/) |  |
| `__has_include` in preprocessor conditionals | [P0061R1](https://wg21.link/P0061R1/) |  |
| `[[fallthrough]]` attribute | [P0188R1](https://wg21.link/P0188R1/) |  |
| `[[nodiscard]]` attribute | [P0189R1](https://wg21.link/P0189R1/) |  |
| [P1771R1](https://wg21.link/P1771R1/) ( [DR](https://clang.llvm.org/cxx_status.html#dr)) |
| `[[maybe_unused]]` attribute | [P0212R1](https://wg21.link/P0212R1/) |  |
| Aggregate initialization of classes with base classes | [P0017R1](https://wg21.link/P0017R1/) |  |
| `constexpr` lambda expressions | [P0170R1](https://wg21.link/P0170R1/) |  |
| Differing `begin` and `end` types in range-based `for` | [P0184R0](https://wg21.link/P0184R0/) |  |
| Lambda capture of `*this` | [P0018R3](https://wg21.link/P0018R3/) |  |
| Direct-list-initialization of `enum`s | [P0138R2](https://wg21.link/P0138R2/) |  |
| Hexadecimal floating-point literals | [P0245R1](https://wg21.link/P0245R1/) |  |
| Using attribute namespaces without repetition | [P0028R4](https://wg21.link/P0028R4/) |  |
| Dynamic memory allocation for over-aligned data | [P0035R4](https://wg21.link/P0035R4/) |  |
| Template argument deduction for class templates | [P0091R3](https://wg21.link/P0091R3/) |  |
| [P0512R0](https://wg21.link/P0512R0/) |
| [P0620R0](https://wg21.link/P0620R0/) ( [DR](https://clang.llvm.org/cxx_status.html#dr)) |
| [P0702R1](https://wg21.link/P0702R1/) ( [DR](https://clang.llvm.org/cxx_status.html#dr)) |
| Non-type template parameters with `auto` type | [P0127R2](https://wg21.link/P0127R2/) |  |
| Guaranteed copy elision | [P0135R1](https://wg21.link/P0135R1/) |  |
| Stricter expression evaluation order | [P0145R3](https://wg21.link/P0145R3/) |  |
| [P0400R0](https://wg21.link/P0400R0/) |
| Requirement to ignore unknown attributes | [P0283R2](https://wg21.link/P0283R2/) |  |
| `constexpr if` statements | [P0292R2](https://wg21.link/P0292R2/) |  |
| Inline variables | [P0386R2](https://wg21.link/P0386R2/) |  |
| Structured bindings | [P0217R3](https://wg21.link/P0217R3/) |  |
| [P0961R1](https://wg21.link/P0961R1/) ( [DR](https://clang.llvm.org/cxx_status.html#dr)) |
| [P0969R0](https://wg21.link/P0969R0/) ( [DR](https://clang.llvm.org/cxx_status.html#dr)) |
| Separate variable and condition for `if` and `switch` | [P0305R1](https://wg21.link/P0305R1/) |  |
| Matching of template template-parameters to arguments | [P0522R0](https://wg21.link/P0522R0/) | This feature can be source breaking. Should be enabled explicitly with the compiler flag -frelaxed-template-template-args |
| Removing deprecated dynamic exception specifications | [P0003R5](https://wg21.link/P0003R5/) |  |
| Features implemented in the libc++library |
| Cleaning-up `noexcept` in the Library | [N4258](https://wg21.link/N4258/) | Requires Xcode 26.4 |
| `<memory_resource>` | [P0220R1](https://wg21.link/P0220R1/) | Requires Xcode 15<br>**Minimum deployment target:** iOS 17.0, macOS 14.0, watchOS 10.0 and tvOS 17.0. |
| Filesystem library | [P0219R1](https://wg21.link/P0219R1/) | **Minimum deployment target:**<br>macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0 |
| [P0218R1](https://wg21.link/P0218R1/) |
| [P0392R0](https://wg21.link/P0392R0/) |
| [P0317R1](https://wg21.link/P0317R1/) |
| [P0492R2](https://wg21.link/P0492R2/) |
| TransformationTrait Alias `void_t`. | [N3911](https://wg21.link/N3911/) |  |
| Invoke function template | [N4169](https://wg21.link/N4169/) |  |
| `std::uncaught_exceptions` | [N4259](https://wg21.link/N4259/) |  |
| TriviallyCopyable `reference_wrapper`. | [N4277](https://wg21.link/N4277/) |  |
| Improved insertion interface for unique-key maps. | [N4279](https://wg21.link/N4279/) |  |
| `std::size()`, `std::empty()` and `std::data()` | [N4280](https://wg21.link/N4280/) |  |
| Contiguous Iterators | [N4284](https://wg21.link/N4284/) |  |
| Cleanup for exception-specification and throw-expression. | [N4285](https://wg21.link/N4285/) |  |
| Improving `std::pair` and `std::tuple` | [N4387](https://wg21.link/N4285/) |  |
| `bool_constant` | [N4389](https://wg21.link/N4389/) |  |
| `shared_mutex` | [N4508](https://wg21.link/N4508/) | Pass `-fno-exceptions` compiler flag to back deploy to older OSes. Note that methods that throw exceptions on failure will abort in this mode. |
| LWG 2228 missing SFINAE rule | [N4366](https://wg21.link/N4366/) |  |
| Minimal incomplete type support for standard containers | [N4510](https://wg21.link/N4510/) |  |
| Remove deprecated iostreams aliases. | [P0004R1](https://wg21.link/P0004R1/) |  |
| Adopt type traits variable templates for C++17 | [P0006R0](https://wg21.link/P0006R0/) |  |
| Polishing `<chrono>` | [P0092R1](https://wg21.link/P0092R1/) |  |
| Constant view: `std::as_const` helper function template. | [P0007R1](https://wg21.link/P0007R1/) |  |
| Making `std::owner_less` more flexible | [P0074R0](https://wg21.link/P0074R0/) |  |
| Logical type traits rev 2 | [P0013R1](https://wg21.link/P0013R1/) |  |
| Re-enabling shared\_from\_this | [P0033R1](https://wg21.link/P0033R1/) |  |
| Adopt `not_fn` from library fundamentals 2 for C++17 | [P0005R4](https://wg21.link/P0005R4/) |  |
| constexpr `atomic::is_always_lock_free` | [P0152R1](https://wg21.link/P0152R1/) |  |
| \[nothrow-\]swappable traits | [P0185R1](https://wg21.link/P0185R1/) |  |
| Fixing a design mistake in the searchers interface | [P0253R1](https://wg21.link/P0253R1/) |  |
| An algorithm to `clamp` a value between a pair of boundary values | [P0025R0](https://wg21.link/P0025R0/) |  |
| 3-argument overload to `std::hypot` | [P0030R1](https://wg21.link/P0030R1/) |  |
| Constexpr modifiers for `reverse_iterator`, `move_iterator`, array and Range Access | [P0031R0](https://wg21.link/P0031R0/) |  |
| Give `std::string` a non-const `.data()` member function | [P0272R1](https://wg21.link/P0272R1/) |  |
| `is_callable`, the missing INVOKE related trait | [P0077R2](https://wg21.link/P0077R2/) |  |
| Homogeneous interface for `variant`, `any` and `optional` | [P0032R3](https://wg21.link/P0032R3/) |  |
| Extending memory management tools | [P0040R3](https://wg21.link/P0040R3/) |  |
| C++17 should refer to C11 instead of C99 | [P0063R3](https://wg21.link/P0063R3/) |  |
| Splicing maps and sets | [P0083R3](https://wg21.link/P0083R3/) |  |
| Emplace return type | [P0084R2](https://wg21.link/P0084R2/) |  |
| Variant: a type-safe union for C++17 | [P0088R3](https://wg21.link/P0088R3/) | **Minimum deployment target:**<br>`bad_variant_access` and methods that throw it: `get` and `visit` require macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0<br>Pass `-fno-exceptions` compiler flag to back deploy to older OSes. Note that methods that throw exceptions on failure will abort in this mode. |
| Replacement of class objects containing reference members | [P0137R1](https://wg21.link/P0137R1/) |  |
| `shared_ptr::weak_type` | [P0163R0](https://wg21.link/P0163R0/) |  |
| Synopses for the c library | [P0175R1](https://wg21.link/P0175R1/) |  |
| Reserve a new library namespace for future standardization | [P0180R2](https://wg21.link/P0180R2/) |  |
| `make_from_tuple`: apply for construction | [P0209R2](https://wg21.link/P0209R2/) |  |
| Integrating `std::string_view` and `std::string` | [P0254R2](https://wg21.link/P0254R2/) |  |
| `has_unique_object_representations` | [P0258R2](https://wg21.link/P0258R2/) |  |
| Adopt selected library fundamentals V2 components for C++17 | [P0295R0](https://wg21.link/P0295R0/) |  |
| Adopt library fundamentals V1 TS components for C++17 (`optional`, `string_view`, `any`) | [P0220R1](https://wg21.link/P0220R1/) | **Minimum deployment target:**<br>`bad_optional_access` and `bad_any_cast`, and methods that throw them: `optional::value` and `any_cast` require macOS 10.13, iOS 12.0, tvOS 12.0, watchOS 5.0<br>Pass `-fno-exceptions` compiler flag to back deploy to older OSes. Note that methods that throw exceptions on failure will abort in this mode. |
| Removing allocator support in `std::function` | [P0302R1](https://wg21.link/P0302R1/) |  |
| Making optional greater equal again | [P0307R2](https://wg21.link/P0307R2/) |  |
| Better names for parallel execution policies in C++17 | [P0336R1](https://wg21.link/P0336R1/) |  |
| Delete `operator=` for polymorphic\_allocator | [P0337R0](https://wg21.link/P0337R0/) |  |
| A `<random>` nomenclature tweak | [P0346R1](https://wg21.link/P0346R1/) |  |
| Fixes for `not_fn` | [P0358R1](https://wg21.link/P0358R1/) |  |
| Temporarily discourage `memory_order_consume` | [P0371R1](https://wg21.link/P0371R1/) |  |
| Making variant greater equal | [P0393R3](https://wg21.link/P0393R3/) |  |
| Removing deprecated exception specifications from C++17 | [P0003R5](https://wg21.link/P0003R5/) |  |
| Elementary string conversions `std::to_chars`, `std::from_chars` | [P0067R5](https://wg21.link/P0067R5/) | **Minimum deployment target:**<br>For integral types, macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0<br>For floating-point types, macOS 13.3, iOS 16.3, tvOS 16.3, watchOS 9.3 |
| Literal suffixes for `basic_string_view` | [P0403R1](https://wg21.link/P0403R1/) |  |
| Merging `shared_ptr` changes from Library Fundamentals to C++17 | [P0414R2](https://wg21.link/P0414R2/) |  |
| Constexpr for `std::char_traits` | [P0426R1](https://wg21.link/P0426R1/) |  |
| Resolving LWG Issues re `common_type` | [P0435R1](https://wg21.link/P0435R1/) |  |
| Correcting library usage of “literal type” | [P0503R0](https://wg21.link/P0503R0/) |  |
| Revisiting in-place tag types for any/optional/variant | [P0504R0](https://wg21.link/P0504R0/) |  |
| Wording for GB 50 - `constexpr` for `chrono` | [P0505R0](https://wg21.link/P0505R0/) |  |
| Updating “Restrictions on exception handling” | [P0509R1](https://wg21.link/P0509R1/) |  |
| Disallowing references, incomplete types, arrays, and empty variants | [P0510R0](https://wg21.link/P0510R0/) |  |
| Poisoning the hash | [P0513R0](https://wg21.link/P0513R0/) |  |
| Clarify that `shared_future`’s copy operations have wide contracts | [P0516R0](https://wg21.link/P0516R0/) |  |
| Make `future_error` constructible | [P0517R0](https://wg21.link/P0517R0/) |  |
| `shared_ptr use_count/unique` | [P0521R0](https://wg21.link/P0521R0/) |  |
| Variadic lock guard(rev 5) | [P0156R2](https://wg21.link/P0156R2/) |  |
| A byte type definition | [P0298R3](https://wg21.link/P0298R3/) |  |
| File system library on non-POSIX-like operating systems | [P0430R2](https://wg21.link/P0430R2/) |  |
| Integrating template deduction for class templates into the standard library | [P0433R2](https://wg21.link/P0433R2/) |  |
| `common_type` and duration | [P0548R1](https://wg21.link/P0548R1/) |  |
| Resolving `atomic<T>` named base class inconsistencies | [P0558R1](https://wg21.link/P0558R1/) |  |
| `noexcept` for hash functions | [P0599R1](https://wg21.link/P0599R1/) |  |
| Resolving GB 55, US 84, US 85, US 86 | [P0604R0](https://wg21.link/P0604R0/) |  |
| Some improvements to class template argument deduction integration into the standard library | [P0739R0](https://wg21.link/P0739R0/) |  |

### C++14

| Feature | Paper | Notes |
| --- | --- | --- |
| Tweak to certain c++ contextual conversions | [N3323](https://wg21.link/N3323/) |  |
| Binary literals | [N3472](https://wg21.link/N3472/) |  |
| decltype(auto) | [N3638](https://wg21.link/N3638/) |  |
| Return type deduction for normal functions |
| Initialized lambda captures | [N3648](https://wg21.link/N3648/) |  |
| Generic lambdas | [N3649](https://wg21.link/N3649/) |  |
| Variable templates | [N3651](https://wg21.link/N3651/) |  |
| Relaxing requirements on constexpr functions | [N3652](https://wg21.link/N3652/) |  |
| Member initializers and aggregates | [N3653](https://wg21.link/N3653/) |  |
| Clarifying memory allocation | [N3664](https://wg21.link/N3664/) |  |
| `[[deprecated]]` attribute | [N3760](https://wg21.link/N3760/) |  |
| Single quotation mark as digit separator | [N3781](https://wg21.link/N3781/) |  |
| Sized deallocation (`delete` and `delete[]`) | [N3778](https://wg21.link/N3778) |  |
| Features implemented in the libc++library |
| Terminology for container element requirements - Rev 1 | [N3346](https://wg21.link/N3346/) |  |
| Making operator functors greater`<>` | [N3421](https://wg21.link/N3421/) |  |
| `std::result_of` and SFINAE | [N3462](https://wg21.link/N3462/) |  |
| `integral_constant` improvements | [N3545](https://wg21.link/N3545/) |  |
| Null forward iterators | [N3644](https://wg21.link/N3644/) |  |
| `std::exchange()` | [N3668](https://wg21.link/N3668/) |  |
| Compile-time integer sequences | [N3658](https://wg21.link/N3658/) |  |
| Addressing tuples by type | [N3670](https://wg21.link/N3670/) |  |
| Making non-modifying sequence operations more robust | [N3671](https://wg21.link/N3671/) |  |
| `make_unique` | [N3656](https://wg21.link/N3656/) |  |
| Quoted Strings | [N3654](https://wg21.link/N3654/) |  |
| User-defined Literals | [N3642](https://wg21.link/N3642/) |  |
| `TransformationTraits` Redux (excluding part 4) | [N3655](https://wg21.link/N3655/) |  |
| Heterogeneous comparison lookup | [N3657](https://wg21.link/N3657/) |  |
| Fixing `constexpr` member functions without `const` | [N3669](https://wg21.link/N3669/) |  |
| Shared locking | [N3659](https://wg21.link/N3659/) |  |
| User-defined literals for `std::complex` | [N3779](https://wg21.link/N3779/) |  |
| Discouraging `rand()` | [N3924](https://wg21.link/N3924/) |  |
| Consistent metafunction aliases | [N3887](https://wg21.link/N3887/) |  |
| Rename `shared_mutex` to `shared_timed_mutex` | [N3891](https://wg21.link/N3891/) |  |
| Constexpr library additions: chrono, containers, utilities, complex numbers, functional | [N3469](https://wg21.link/N3469/) |  |
| [N3470](https://wg21.link/N3470/) |
| [N3471](https://wg21.link/N3471/) |
| [N3302](https://wg21.link/N3302/) |
| [N3789](https://wg21.link/N3789/) |

### C++11

| Feature | Paper | Notes |
| --- | --- | --- |
| Rvalue references | [N2118](https://wg21.link/N2118/) |  |
| [P1825R0](https://wg21.link/P1825R0/) ( [DR](https://clang.llvm.org/cxx_status.html#dr)) |
| Rvalue references for `*this` | [N2439](https://wg21.link/N2439/) |  |
| Initialization of class objects by rvalues | [N1610](https://wg21.link/N1610/) |  |
| Non-static data member initializers | [N2756](https://wg21.link/N2756/) |  |
| Variadic templates | [N2242](https://wg21.link/N2242/) |  |
| Extending variadic template template parameters | [N2555](https://wg21.link/N2555/) |  |
| Initializer lists | [N2672](https://wg21.link/N2672/) |  |
| [P1009R2](https://wg21.link/P1009R2/) ( [DR](https://clang.llvm.org/cxx_status.html#dr)) |
| [P1957R2](https://wg21.link/P1957R2/) ( [DR](https://clang.llvm.org/cxx_status.html#dr)) |
| Static assertions | [N1720](https://wg21.link/N1720/) |  |
| `auto`-typed variables | [N1984](https://wg21.link/N1984/) |  |
| Multi-declarator `auto` | [N1737](https://wg21.link/N1737/) |  |
| Removal of `auto` as a storage-class specifier | [N2546](https://wg21.link/N2546/) |  |
| New function declarator syntax | [N2541](https://wg21.link/N2541/) |  |
| Declared type of an expression | [N2343](https://wg21.link/N2343/) |  |
| Incomplete return types | [N3276](https://wg21.link/N3276/) |  |
| Right angle brackets | [N1757](https://wg21.link/N1757/) |  |
| Default template arguments for function templates | [DR226](https://cplusplus.github.io/CWG/issues/226.html) |  |
| Solving the SFINAE problem for expressions | [DR339](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html) |  |
| Alias templates | [N2258](https://wg21.link/N2258/) |  |
| Extern templates | [N1987](https://wg21.link/N1987/) |  |
| Null pointer constant | [N2431](https://wg21.link/N2431/) |  |
| Strongly-typed enums | [N2347](https://wg21.link/N2347/) |  |
| Forward declarations for enums | [N2764](https://wg21.link/N2764/) |  |
| [DR1206](https://cplusplus.github.io/CWG/issues/1206.html) |
| Standardized attribute syntax | [N2761](https://wg21.link/N2761/) |  |
| `ConstExpr:` generalized constant expressions | [N2235](https://wg21.link/N2235/) |  |
| [P0859R0](https://wg21.link/P0859R0/) ( [DR](https://clang.llvm.org/cxx_status.html#dr)) |
| Alignment support | [N2341](https://wg21.link/N2341/) |  |
| Conditionally-support behavior | [N1627](https://wg21.link/N1627/) |  |
| Changing undefined behavior into diagnosable errors | [N1727](https://wg21.link/N1727/) |  |
| Delegating constructors | [N1986](https://wg21.link/N1986/) |  |
| Inheriting constructors | [N2540](https://wg21.link/N2540/) |  |
| [P0136R1](https://wg21.link/P0136R1/) ( [DR](https://clang.llvm.org/cxx_status.html#dr)) |
| Explicit conversion operators | [N2437](https://wg21.link/N2437/) |  |
| New character types | [N2249](https://wg21.link/N2249/) |  |
| Unicode string literals | [N2442](https://wg21.link/N2442/) |  |
| Raw string literals | [N2442](https://wg21.link/N2442/) |  |
| Universal character names in literals | [N2170](https://wg21.link/N2170/) |  |
| User-defined literals | [N2765](https://wg21.link/N2765/) |  |
| Standard Layout Types | [N2342](https://wg21.link/N2342/) |  |
| Defaulted functions | [N2346](https://wg21.link/N2346/) |  |
| [P1286R2](https://wg21.link/P1286R2/) ( [DR](https://clang.llvm.org/cxx_status.html#dr)) |
| Deleted functions | [N2346](https://wg21.link/N2346/) |  |
| Extended friend declarations | [N1791](https://wg21.link/N1791/) |  |
| Extending `sizeof` | [N2253](https://wg21.link/N2253/) |  |
| [DR850](https://cplusplus.github.io/CWG/issues/850.html) |
| Inline namespaces | [N2535](https://wg21.link/N2535/) |  |
| Unrestricted unions | [N2544](https://wg21.link/N2544/) |  |
| Local and unnamed types as template arguments | [N2657](https://wg21.link/N2657/) |  |
| Range-based for | [N2930](https://wg21.link/N2930/) |  |
| [P0962R1](https://wg21.link/P0962R1/) ( [DR](https://clang.llvm.org/cxx_status.html#dr)) |
| Explicit virtual overrides | [N2928](https://wg21.link/N2928/) |  |
| [N3206](https://wg21.link/N3206/) |
| [N3272](https://wg21.link/N3272/) |
| Allowing move constructors to throw `[noexcept]` | [N3050](https://wg21.link/N3050/) |  |
| Defining move special member functions | [N3053](https://wg21.link/N3053/) |  |
| Concurrency |
| Sequence points | [N2239](https://wg21.link/N2239/) |  |
| Atomic operations | [N2427](https://wg21.link/N2427/) |  |
| Strong compare and exchange | [N2748](https://wg21.link/N2748/) |  |
| Bidirectional fences | [N2752](https://wg21.link/N2752/) |  |
| Memory model | [N2429](https://wg21.link/N2429/) |  |
| Data-dependency ordering: atomics and memory model | [N2664](https://wg21.link/N2664/) |  |
| Propagating exceptions | [N2179](https://wg21.link/N2179/) |  |
| Allow atomics use in signal handlers | [N2547](https://wg21.link/N2547/) |  |
| Thread-local storage | [N2659](https://wg21.link/N2659/) |  |
| Dynamic initialization and destruction with concurrency | [N2660](https://wg21.link/N2660/) |  |
| C99 Features in C++11 |
| `__func__` predefined identifier | [N2340](https://wg21.link/N2340/) |  |
| C99 preprocessor | [N1653](https://wg21.link/N1653/) |  |
| `long long` | [N1811](https://wg21.link/N1811/) |  |

### C++98/03

Clang and libc++ supports all features of the ISO C++ 1998 standard and the defects addressed in the ISO C++ 2003 standard.

## C++ standard library hardening

Starting in Xcode 16, the C++ standard library supports _hardening_. Turning on hardening enables checks for common cases of misuse of the standard library; if a check fails, the program is reliably terminated, helping prevent security vulnerabilities and diagnose some cases of undefined behavior.

Hardening can be turned on via Xcode Build Settings `(Apple Clang - Language - C++` \> `Enable C++ Standard Library Hardening)`:

- “`No`” — don’t enable any hardening checks.
- “`Yes (fast)`” — enable low-overhead security-critical checks at runtime. We recommend most applications to adopt this setting in the production environment.
- “`Yes (extensive)`” — enable all available low-overhead checks at runtime, including general logic errors in addition to security vulnerabilities. This setting has a higher overhead compared to “Yes” but is still intended to be usable in production by applications that would benefit from the increased level of correctness checking.
- “`Yes (debug)`” — enable all available checks, including heuristic checks that might have significant performance overhead, as well as internal library assertions. We recommend most applications to use this setting in non-production environments (such as test suites and CI, as well as for local development). This setting should not be used in production due to the overhead.

Note that the Debug configuration enables `debug` hardening mode by default. When enabling hardening, make sure not to accidentally override the stricter `debug` mode with a less-strict production-capable mode in the Debug configuration. Turning on hardening might expose latent bugs and cause the application to terminate at runtime. We recommend testing your code thoroughly in a development environment.

For more information about hardening, refer to the [libc++ documentation](https://libcxx.llvm.org/Hardening.html).

## Related resources

### Videos

- [Mix Swift and C++](/content/videos/play/wwdc2023/10172/index.html)
- [Simplify C++ templates with concepts from WWDC22](/content/videos/play/wwdc2022/110367/index.html)
- [What’s New in Clang and LLVM from WWDC19](/content/videos/play/wwdc2019/409/index.html)

### Release notes and documentation

- [Xcode 15.3 Release Notes](/content/documentation/xcode-release-notes/xcode-15_3-release-notes/index.html)
- [Using C++ APIs in Swift and Swift APIs in C++](/content/documentation/Swift/UsingC++APIsInSwiftAndSwiftAPIsInC++/index.html)
- [Xcode 15 Release Notes (Apple Clang and libc++)](/content/documentation/xcode-release-notes/xcode-15-release-notes/index.html)
- [Xcode 14.3 Release Notes (Apple Clang and libc++)](/content/documentation/xcode-release-notes/xcode-14_3-release-notes/index.html)
- [Getting started with Metal-cpp](/content/metal/cpp/index.html)
- Older release notes:
- [MacOS Monterey 12.3 Release Notes (libc++)](/content/documentation/macos-release-notes/macos-12_3-release-notes/index.html)
- [Xcode 14 Release Notes (Apple Clang)](/content/documentation/xcode-release-notes/xcode-14-release-notes/index.html)
