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 | Complete | 7.0 |
P0768R1 | CWG | Library Support for the Spaceship (Comparison) Operator | Albuquerque | ||
P0777R1 | LWG | Treating Unnecessary decay | Albuquerque | Complete | 7.0 |
P0122R7 | LWG | <span> | Jacksonville | Complete | 7.0 |
P0355R7 | LWG | Extending chrono to Calendars and Time Zones | Jacksonville | In progress | |
P0551R3 | LWG | Thou Shalt Not Specialize std Function Templates! | Jacksonville | ||
P0753R2 | LWG | Manipulators for C++ Synchronized Buffered Ostream | Jacksonville | ||
P0754R2 | LWG | <version> | Jacksonville | Complete | 7.0 |
P0809R0 | LWG | Comparing Unordered Containers | Jacksonville | ||
P0858R0 | LWG | Constexpr iterator requirements | Jacksonville | ||
P0905R1 | CWG | Symmetry for spaceship | Jacksonville | ||
P0966R1 | LWG | string::reserve Should Not Shrink | Jacksonville | Complete | 8.0 |
P0019R8 | LWG | Atomic Ref | Rapperswil | ||
P0458R2 | LWG | Checking for Existence of an Element in Associative Containers | Rapperswil | ||
P0475R1 | LWG | LWG 2511: guaranteed copy elision for piecewise construction | Rapperswil | ||
P0476R2 | LWG | Bit-casting object representations | Rapperswil | ||
P0528R3 | CWG | The Curious Case of Padding Bits, Featuring Atomic Compare-and-Exchange | Rapperswil | ||
P0542R5 | CWG | Support for contract based programming in C++ | Rapperswil | ||
P0556R3 | LWG | Integral power-of-2 operations | Rapperswil | In Progress | |
P0619R4 | LWG | Reviewing Deprecated Facilities of C++17 for C++20 | Rapperswil | ||
P0646R1 | LWG | Improving the Return Value of Erase-Like Algorithms | Rapperswil | ||
P0722R3 | CWG | Efficient sized delete for variable sized classes | Rapperswil | ||
P0758R1 | LWG | Implicit conversion traits and utility functions | Rapperswil | ||
P0759R1 | LWG | fpos Requirements | Rapperswil | ||
P0769R2 | LWG | Add shift to <algorithm> | Rapperswil | ||
P0788R3 | LWG | Standard Library Specification in a Concepts and Contracts World | Rapperswil | ||
P0879R0 | LWG | Constexpr for swap and swap related functions Also resolves LWG issue 2800. | Rapperswil | ||
P0887R1 | LWG | The identity metafunction | Rapperswil | Complete | 8.0 |
P0892R2 | CWG | explicit(bool) | Rapperswil | ||
P0898R3 | LWG | Standard Library Concepts | Rapperswil | ||
P0935R0 | LWG | Eradicating unnecessarily explicit default constructors from the standard library | Rapperswil | ||
P0941R2 | CWG | Integrating feature-test macros into the C++ WD | Rapperswil | In progress | |
P1023R0 | LWG | constexpr comparison operators for std::array | Rapperswil | Complete | 8.0 |
P1025R1 | CWG | Update The Reference To The Unicode Standard | Rapperswil | ||
P1120R0 | CWG | Consistency improvements for <=> and other comparison operators | Rapperswil | ||
P0318R1 | LWG | unwrap_ref_decay and unwrap_reference | San Diego | Complete | 8.0 |
P0356R5 | LWG | Simplified partial function application | San Diego | ||
P0357R3 | LWG | reference_wrapper for incomplete types | San Diego | ||
P0482R6 | CWG | char8_t: A type for UTF-8 characters and strings | San Diego | ||
P0487R1 | LWG | Fixing operator>>(basic_istream&, CharT*) (LWG 2499) | San Diego | Complete | 8.0 |
P0591R4 | LWG | Utility functions to implement uses-allocator construction | San Diego | ||
P0595R2 | CWG | P0595R2 std::is_constant_evaluated() | San Diego | ||
P0602R4 | LWG | variant and optional should propagate copy/move triviality | San Diego | Complete | 8.0 |
P0608R3 | LWG | A sane variant converting constructor | San Diego | ||
P0655R1 | LWG | visit<R>: Explicit Return Type for visit | San Diego | ||
P0771R1 | LWG | std::function move constructor should be noexcept | San Diego | Complete | 6.0 |
P0896R4 | LWG | The One Ranges Proposal | San Diego | ||
P0899R1 | LWG | P0899R1 - LWG 3016 is not a defect | San Diego | Nothing to do | |
P0919R3 | LWG | Heterogeneous lookup for unordered containers | San Diego | ||
P0972R0 | LWG | <chrono> zero(), min(), and max() should be noexcept | San Diego | Complete | 8.0 |
P1006R1 | LWG | Constexpr in std::pointer_traits | San Diego | Complete | 8.0 |
P1007R3 | LWG | std::assume_aligned | San Diego | ||
P1020R1 | LWG | Smart pointer creation with default initialization | San Diego | ||
P1032R1 | LWG | Misc constexpr bits | San Diego | ||
P1085R2 | LWG | Should Span be Regular? | San Diego | Complete | 8.0 |
P1123R0 | LWG | Editorial Guidance for merging P0019r8 and P0528r3 | San Diego | ||
P1148R0 | LWG | Cleaning up Clause 20 | San Diego | ||
P1165R1 | LWG | Make stateful allocator propagation more consistent for operator+(basic_string) | San Diego | ||
P1209R0 | LWG | Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20 | San Diego | Complete | 8.0 |
P1210R0 | LWG | Completing the Rebase of Library Fundamentals, Version 3, Working Draft | San Diego | ||
P1236R1 | CWG | Alternative Wording for P0907R4 Signed Integers are Two's Complement | San Diego | ||
P1248R1 | LWG | Remove CommonReference requirement from StrictWeakOrdering (a.k.a Fixing Relations) | San Diego | ||
P1285R0 | LWG | Improving Completeness Requirements for Type Traits | San Diego | ||
P1353R0 | CWG | Missing feature test macros | San Diego |
[ 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 | Complete |
2958 | Moves improperly defined as deleted | Albuquerque | We already do this |
2964 | Apparently redundant requirement for dynamic_pointer_cast | Albuquerque | |
2965 | Non-existing path::native_string() in filesystem_error::what() specification | Albuquerque | Nothing to do |
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 | |
2164 | What are the semantics of vector.emplace(vector.begin(), vector.back())? | Jacksonville | |
2243 | istream::putback problem | Jacksonville | Complete |
2816 | resize_file has impossible postcondition | Jacksonville | Nothing to do |
2843 | Unclear behavior of std::pmr::memory_resource::do_allocate() | Jacksonville | |
2849 | Why does !is_regular_file(from) cause copy_file to report a "file already exists" error? | Jacksonville | Nothing to do |
2851 | std::filesystem enum classes are now underspecified | Jacksonville | Nothing to do |
2946 | LWG 2758's resolution missed further corrections | Jacksonville | Complete |
2969 | polymorphic_allocator::construct() shouldn't pass resource() | Jacksonville | |
2975 | Missing case for pair construction in scoped and polymorphic allocators | Jacksonville | |
2989 | path's stream insertion operator lets you insert everything under the sun | Jacksonville | Completed |
3000 | monotonic_memory_resource::do_is_equal uses dynamic_cast unnecessarily | Jacksonville | |
3002 | [networking.ts] basic_socket_acceptor::is_open() isn't noexcept | Jacksonville | |
3004 | §[string.capacity] and §[vector.capacity] should specify time complexity for capacity() | Jacksonville | Nothing to do |
3005 | Destruction order of arrays by make_shared/allocate_shared only recommended? | Jacksonville | |
3007 | allocate_shared should rebind allocator to cv-unqualified value_type for construction | Jacksonville | |
3009 | Including <string_view> doesn't provide std::size/empty/data | Jacksonville | Complete |
3010 | [networking.ts] uses_executor says "if a type T::executor_type exists" | Jacksonville | |
3013 | (recursive_)directory_iterator construction and traversal should not be noexcept | Jacksonville | Complete |
3014 | More noexcept issues with filesystem operations | Jacksonville | Complete |
3015 | copy_options::unspecified underspecified | Jacksonville | Nothing to do |
3017 | list splice functions should use addressof | Jacksonville | Complete |
3020 | [networking.ts] Remove spurious nested value_type buffer sequence requirement | Jacksonville | |
3026 | filesystem::weakly_canonical still defined in terms of canonical(p, base) | Jacksonville | Complete |
3030 | Who shall meet the requirements of try_lock? | Jacksonville | Nothing to do |
3034 | P0767R1 breaks previously-standard-layout types | Jacksonville | Complete |
3035 | std::allocator's constructors should be constexpr | Jacksonville | Complete |
3039 | Unnecessary decay in thread and packaged_task | Jacksonville | Complete |
3041 | Unnecessary decay in reference_wrapper | Jacksonville | Complete |
3042 | is_literal_type_v should be inline | Jacksonville | Complete |
3043 | Bogus postcondition for filesystem_error constructor | Jacksonville | Complete |
3045 | atomic<floating-point> doesn't have value_type or difference_type | Jacksonville | |
3048 | transform_reduce(exec, first1, last1, first2, init) discards execution policy | Jacksonville | |
3051 | Floating point classifications were inadvertently changed in P0175 | Jacksonville | Nothing to do |
3075 | basic_string needs deduction guides from basic_string_view | Jacksonville | Complete |
2139 | What is a user-defined type? | Rapperswil | |
2970 | Return type of std::visit misspecified | Rapperswil | |
3058 | Parallel adjacent_difference shouldn't require creating temporaries | Rapperswil | |
3062 | Unnecessary decay_t in is_execution_policy_v should be remove_cvref_t | Rapperswil | |
3067 | recursive_directory_iterator::pop must invalidate | Rapperswil | Nothing to do |
3071 | [networking.ts] read_until still refers to "input sequence" | Rapperswil | Nothing to do |
3074 | Non-member functions for valarray should only deduce from the valarray | Rapperswil | |
3076 | basic_string CTAD ambiguity | Rapperswil | Complete |
3079 | LWG 2935 forgot to fix the existing_p overloads of create_directory | Rapperswil | |
3080 | Floating point from_chars pattern specification breaks round-tripping | Rapperswil | |
3083 | What should ios::iword(-1) do? | Rapperswil | Nothing to do |
3094 | [time.duration.io]p4 makes surprising claims about encoding | Rapperswil | |
3100 | Unnecessary and confusing "empty span" wording | Rapperswil | Nothing to do |
3102 | Clarify span iterator and const_iterator behavior | Rapperswil | Complete |
3104 | Fixing duration division | Rapperswil | Complete |
2183 | Muddled allocator requirements for match_results constructors | San Diego | Complete |
2184 | Muddled allocator requirements for match_results assignments | San Diego | Complete |
2412 | promise::set_value() and promise::get_future() should not race | San Diego | |
2499 | operator>>(basic_istream&, CharT*) makes it hard to avoid buffer overflows | San Diego | Resolved by P0487R1 |
2682 | filesystem::copy() won't create a symlink to a directory | San Diego | Nothing to do |
2697 | [concurr.ts] Behavior of future/shared_future unwrapping constructor when given an invalid future | San Diego | |
2797 | Trait precondition violations | San Diego | Resolved by 1285R0 |
2936 | Path comparison is defined in terms of the generic format | San Diego | Complete |
2943 | Problematic specification of the wide version of basic_filebuf::open | San Diego | Nothing to do |
2960 | [fund.ts.v3] nonesuch is insufficiently useless | San Diego | |
2995 | basic_stringbuf default constructor forbids it from using SSO capacity | San Diego | |
2996 | Missing rvalue overloads for shared_ptr operations | San Diego | |
3008 | make_shared (sub)object destruction semantics are not specified | San Diego | |
3022 | is_convertible<derived*, base*> may lead to ODR | San Diego | Resolved by 1285R0 |
3025 | Map-like container deduction guides should use pair<Key, T>, not pair<const Key, T> | San Diego | |
3031 | Algorithms and predicates with non-const reference arguments | San Diego | |
3037 | polymorphic_allocator and incomplete types | San Diego | |
3038 | polymorphic_allocator::allocate should not allow integer overflow to create vulnerabilities | San Diego | |
3054 | uninitialized_copy appears to not be able to meet its exception-safety guarantee | San Diego | |
3065 | LWG 2989 missed that all path's other operators should be hidden friends as well | San Diego | Complete |
3096 | path::lexically_relative is confused by trailing slashes | San Diego | Complete |
3116 | OUTERMOST_ALLOC_TRAITS needs remove_reference_t | San Diego | |
3122 | __cpp_lib_chrono_udls was accidentally dropped | San Diego | We've already made the update; but we don't support all the test macros. When we do, this will be closed |
3127 | basic_osyncstream::rdbuf needs a const_cast | San Diego | |
3128 | strstream::rdbuf needs a const_cast | San Diego | Nothing to do |
3129 | regex_token_iterator constructor uses wrong pointer arithmetic | San Diego | |
3130 | §[input.output] needs many addressof | San Diego | |
3131 | addressof all the things | San Diego | |
3132 | Library needs to ban macros named expects or ensures | San Diego | Nothing to do |
3134 | [fund.ts.v3] LFTSv3 contains extraneous [meta] variable templates that should have been deleted by P09961 | San Diego | Resolved by P1210R0 |
3137 | Header for __cpp_lib_to_chars | San Diego | We've already made the update; but we don't support all the test macros. When we do, this will be closed |
3145 | file_clock breaks ABI for C++17 implementations | San Diego | Complete |
3147 | Definitions of "likely" and "unlikely" are likely to cause problems | San Diego | |
3148 | <concepts> should be freestanding | San Diego | |
3153 | Common and common_type have too little in common | San Diego | |
3154 | Common and CommonReference have a common defect | San Diego |
Last Updated: 28-Nov-2018