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 | Complete | 7.0 |
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 | In Progress | 7.0 |
P0415R1 | LWG | Constexpr for std::complex | Albuquerque | In Progress | 7.0 |
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 | 7.0 |
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 | Complete | 7.0 |
[ 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]
The missing bits in P0202 are in copy, copy_backwards, move, and move_backwards (and the ones that call them: copy_n, rotate_copy, merge, set_union, set_difference, and set_symmetric_difference). This is because the first four algorithms have specializations that call memmove which is not constexpr. See Bug 25165
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 | Complete |
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 | Complete |
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<int>? | 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: 6-Feb-2018