libc++ C++2a Status
In July 2017, the C++ standard committee created a draft for the next version of the C++ standard, known here as "C++2a" (probably to be C++20).
This page shows the status of libc++; the status of clang's support of the language features is here.
Reminder: Features in unreleased drafts of the standard are subject to change.
The groups that have contributed papers:
- LWG - Library working group
- CWG - Core Language Working group
- SG1 - Study group #1 (Concurrency working group)
Paper Status
| Paper # | Group | Paper Name | Meeting | Status | First released version |
|---|---|---|---|---|---|
| P0463R1 | LWG | Endian just Endian | Toronto | In progress | |
| P0674R1 | LWG | Extending make_shared to Support Arrays | Toronto | ||
| P0020R6 | LWG | Floating Point Atomic | Albuquerque | ||
| P0053R7 | LWG | C++ Synchronized Buffered Ostream | Albuquerque | ||
| P0202R3 | LWG | Add constexpr modifiers to functions in <algorithm> and <utility> Headers | Albuquerque | ||
| P0415R1 | LWG | Constexpr for std::complex | Albuquerque | ||
| P0439R0 | LWG | Make std::memory_order a scoped enumeration | Albuquerque | ||
| P0457R2 | LWG | String Prefix and Suffix Checking | Albuquerque | Complete | 6.0 |
| P0550R2 | LWG | Transformation Trait remove_cvref | Albuquerque | Complete | 6.0 |
| P0600R1 | LWG | nodiscard in the Library | Albuquerque | In Progress | |
| P0616R0 | LWG | de-pessimize legacy | Albuquerque | ||
| P0653R2 | LWG | Utility to convert a pointer to a raw pointer | Albuquerque | Complete | 6.0 |
| P0718R2 | LWG | Atomic shared_ptr | Albuquerque | ||
| P0767R1 | CWG | Deprecate POD | Albuquerque | ||
| P0768R1 | CWG | Library Support for the Spaceship (Comparison) Operator | Albuquerque | ||
| P0777R1 | LWG | Treating Unnecessary decay | Albuquerque |
[ Note: "Nothing to do" means that no library changes were needed to implement this change -- end note]
The missing bits in P0600 are in [mem.res.class], [mem.poly.allocator.class], and [container.node.overview]
Library Working group Issues Status
| Issue # | Issue Name | Meeting | Status |
|---|---|---|---|
| 2070 | allocate_shared should use allocator_traits<A>::construct | Toronto | Resolved by P0674R1 |
| 2444 | Inconsistent complexity for std::sort_heap | Toronto | |
| 2593 | Moved-from state of Allocators | Toronto | |
| 2597 | std::log misspecified for complex numbers | Toronto | |
| 2783 | stack::emplace() and queue::emplace() should return decltype(auto) | Toronto | |
| 2932 | Constraints on parallel algorithm implementations are underspecified | Toronto | |
| 2937 | Is equivalent("existing_thing", "not_existing_thing") an error | Toronto | Complete |
| 2940 | result_of specification also needs a little cleanup | Toronto | |
| 2942 | LWG 2873's resolution missed weak_ptr::owner_before | Toronto | Complete |
| 2954 | Specialization of the convenience variable templates should be prohibited | Toronto | Complete |
| 2961 | Bad postcondition for set_default_resource | Toronto | |
| 2966 | Incomplete resolution of US 74 | Toronto | Nothing to do |
| 2974 | Diagnose out of bounds tuple_element/variant_alternative | Toronto | Complete |
| 2779 | [networking.ts] Relax requirements on buffer sequence iterators | Albuquerque | |
| 2870 | Default value of parameter theta of polar should be dependent | Albuquerque | |
| 2935 | What should create_directories do when p already exists but is not a directory? | Albuquerque | |
| 2941 | [thread.req.timing] wording should apply to both member and namespace-level functions | Albuquerque | Nothing to do |
| 2944 | LWG 2905 accidentally removed requirement that construction of the deleter doesn't throw an exception | Albuquerque | Nothing to do |
| 2945 | Order of template parameters in optional comparisons | Albuquerque | Complete |
| 2948 | unique_ptr does not define operator<< for stream output | Albuquerque | Complete |
| 2950 | std::byte operations are misspecified | Albuquerque | Complete |
| 2952 | iterator_traits should work for pointers to cv T | Albuquerque | Complete |
| 2953 | LWG 2853 should apply to deque::erase too | Albuquerque | |
| 2958 | Moves improperly defined as deleted | Albuquerque | |
| 2964 | Apparently redundant requirement for dynamic_pointer_cast | Albuquerque | |
| 2965 | Non-existing path::native_string() in filesystem_error::what() specification | Albuquerque | |
| 2972 | What is is_trivially_destructible_v | Albuquerque | Complete |
| 2976 | Dangling uses_allocator specialization for packaged_task | Albuquerque | Complete |
| 2977 | unordered_meow::merge() has incorrect Throws: clause | Albuquerque | |
| 2978 | Hash support for pmr::string and friends | Albuquerque | |
| 2979 | aligned_union should require complete object types | Albuquerque | Complete |
| 2980 | Cannot compare_exchange empty pointers | Albuquerque | |
| 2981 | Remove redundant deduction guides from standard library | Albuquerque | |
| 2982 | Making size_type consistent in associative container deduction guides | Albuquerque | |
| 2988 | Clause 32 cleanup missed one typename | Albuquerque | |
| 2993 | reference_wrapper | Albuquerque | |
| 2998 | Requirements on function objects passed to {forward_,}list-specific algorithms | Albuquerque | Nothing to do |
| 3001 | weak_ptr::element_type needs remove_extent_t | Albuquerque | |
| 3024 | variant's copies must be deleted instead of disabled via SFINAE | Albuquerque |
Last Updated: 16-Jul-2017