libc++ C++2b Status


In November 2020, the C++ standard committee adopted the first changes to the next version of the C++ standard, known here as “C++2b” (probably to be C++23).

This page shows the status of libc++; the status of clang’s support of the language features is here.


Features in unreleased drafts of the standard are subject to change.

The groups that have contributed papers:

  • CWG - Core Language Working group
  • LWG - Library working group
  • SG1 - Study group #1 (Concurrency working group)


“Nothing to do” means that no library changes were needed to implement this change.

Paper Status

Paper # Group Paper Name Meeting Status First released version
P0881R7 LWG A Proposal to add stacktrace library Autumn 2020    
P0943R6 LWG Support C atomics in C++ Autumn 2020    
P1048R1 LWG A proposal for a type trait to detect scoped enumerations Autumn 2020 Complete 12.0
P1679R3 LWG string contains function Autumn 2020 Complete 12.0
P1682R3 LWG std::to_underlying for enumerations February 2021 Complete 13.0
P2017R1 LWG Conditionally borrowed ranges February 2021    
P2160R1 LWG Locks lock lockables February 2021    
P2162R2 LWG Inheriting from std::variant February 2021 Complete 13.0
P2212R2 LWG Relax Requirements for time_point::clock February 2021    
P2259R1 LWG Repairing input range adaptors and counted_iterator February 2021    

Library Working Group Issues Status

Issue # Issue Name Meeting Status First released version
2839 Self-move-assignment of library types, again November 2020    
3117 Missing packaged_task deduction guides November 2020    
3143 monotonic_buffer_resource growth policy is unclear November 2020    
3195 What is the stored pointer value of an empty weak_ptr? November 2020    
3211 std::tuple<> should be trivially constructible November 2020    
3236 Random access iterator requirements lack limiting relational operators domain to comparing those from the same range November 2020    
3265 move_iterator’s conversions are more broken after P1207 November 2020 Fixed by LWG3435  
3435 three_way_comparable_with<reverse_iterator<int*>, reverse_iterator<const int*>> November 2020 Complete 13.0
3432 Missing requirement for comparison_category November 2020    
3447 Deduction guides for take_view and drop_view have different constraints November 2020    
3450 The const overloads of take_while_view::begin/end are underconstrained November 2020    
3464 istream::gcount() can overflow November 2020    
2731 Existence of lock_guard<MutexTypes...>::mutex_type typedef unclear November 2020    
2743 P0083R3 node_handle private members missing “exposition only” comment November 2020    
2820 Clarify <cstdint> macros November 2020    
3120 Unclear behavior of monotonic_buffer_resource::release() November 2020    
3170 is_always_equal added to std::allocator makes the standard library treat derived types as always equal November 2020    
3036 polymorphic_allocator::destroy is extraneous November 2020    
3171 LWG2989 breaks directory_entry stream insertion November 2020    
3306 ranges::advance violates its preconditions November 2020    
3403 Domain of ranges::ssize(E) doesn’t match ranges::size(E) November 2020    
3404 Finish removing subrange’s conversions from pair-like November 2020    
3405 common_view’s converting constructor is bad, too November 2020    
3406 elements_view::begin() and elements_view::end() have incompatible constraints November 2020    
3419 [algorithms.requirements]/15 doesn’t reserve as many rights as it intends to November 2020    
3420 cpp17-iterator should check that the type looks like an iterator first November 2020    
3421 Imperfect ADL emulation for boolean-testable November 2020    
3425 condition_variable_any fails to constrain its Lock parameters November 2020    
3426 operator<=>(const unique_ptr<T, D>&, nullptr_t) can’t get no satisfaction November 2020    
3427 operator<=>(const shared_ptr<T>&, nullptr_t) definition ill-formed November 2020    
3428 single_view’s in place constructor should be explicit November 2020    
3434 ios_base never reclaims memory for iarray and parray November 2020    
3437 __cpp_lib_polymorphic_allocator is in the wrong header November 2020    
3446 indirectly_readable_traits ambiguity for types with both value_type and element_type November 2020    
3448 transform_view’s sentinel<false> not comparable with iterator<true> November 2020    
3449 take_view and take_while_view’s sentinel<false> not comparable with their const iterator November 2020    
3453 Generic code cannot call ranges::advance(i, s) November 2020    
3455 Incorrect Postconditions on unique_ptr move assignment November 2020    
3460 Unimplementable noop_coroutine_handle guarantees November 2020    
3461 convertible_to’s description mishandles cv-qualified void November 2020    
3465 compare_partial_order_fallback requires F < E November 2020    
3466 Specify the requirements for promise/future/shared_future consistently November 2020    
3467 bool can’t be an integer-like type November 2020    
3472 counted_iterator is missing preconditions November 2020    
3473 Normative encouragement in non-normative note November 2020    
3474 Nesting join_views is broken because of CTAD November 2020    
3476 thread and jthread constructors require that the parameters be move-constructible but never move construct the parameters November 2020    
3477 Simplify constraints for semiregular-box November 2020    
3482 drop_view’s const begin should additionally require sized_range November 2020    
3483 transform_view::iterator’s difference is overconstrained November 2020    
3391 Problems with counted_iterator/move_iterator::base() const & February 2021    
3433 subrange::advance(n) has UB when n < 0 February 2021    
3490 ranges::drop_while_view::begin() is missing a precondition February 2021    
3492 Minimal improvements to elements_view::iterator February 2021    
3494 Allow ranges to be conditionally borrowed February 2021 Superseded by P2017R1  
3495 constexpr launder makes pointers to inactive members of unions usable February 2021    
3500 join_view::iterator::operator->() is bogus February 2021    
3502 elements_view should not be allowed to return dangling reference February 2021    
3505 split_view::outer-iterator::operator++ misspecified February 2021    

Last Updated: 01-Mar-2021