libc++ C++20 Status

Overview

In July 2017, the C++ standard committee created a draft for the next version of the C++ standard, initially known as “C++2a”. In September 2020, the C++ standard committee approved this draft, and sent it to ISO for approval as C++20.

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

Attention

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)

Note

“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
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 Complete 12.0
P0415R1 LWG Constexpr for std::complex Albuquerque In Progress 7.0
P0439R0 LWG Make std::memory_order a scoped enumeration Albuquerque Complete  
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 [1] 7.0
P0616R0 LWG de-pessimize legacy <numeric> algorithms with std::move Albuquerque Complete 12.0
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 Complete  
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 Complete 11.0
P0753R2 LWG Manipulators for C++ Synchronized Buffered Ostream Jacksonville    
P0754R2 LWG <version> Jacksonville Complete 7.0
P0809R0 LWG Comparing Unordered Containers Jacksonville Nothing To Do  
P0858R0 LWG Constexpr iterator requirements Jacksonville    
P0905R1 CWG Symmetry for spaceship Jacksonville    
P0966R1 LWG string::reserve Should Not Shrink Jacksonville Complete [2] 12.0
           
P0019R8 LWG Atomic Ref Rapperswil    
P0458R2 LWG Checking for Existence of an Element in Associative Containers Rapperswil Complete  
P0475R1 LWG LWG 2511: guaranteed copy elision for piecewise construction Rapperswil Complete  
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 Removed in Cologne n/a
P0556R3 LWG Integral power-of-2 operations Rapperswil Complete 9.0
P0619R4 LWG Reviewing Deprecated Facilities of C++17 for C++20 Rapperswil Partial [3]  
P0646R1 LWG Improving the Return Value of Erase-Like Algorithms Rapperswil Complete 10.0
P0722R3 CWG Efficient sized delete for variable sized classes Rapperswil Complete 9.0
P0758R1 LWG Implicit conversion traits and utility functions Rapperswil Complete  
P0759R1 LWG fpos Requirements Rapperswil Complete 11.0
P0769R2 LWG Add shift to <algorithm> Rapperswil    
P0788R3 LWG Standard Library Specification in a Concepts and Contracts World Rapperswil Removed in Cologne n/a
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 Complete 12.0
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 Complete 8.0
P0482R6 CWG char8_t: A type for UTF-8 characters and strings San Diego In Progress  
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 Complete 9.0
P0602R4 LWG variant and optional should propagate copy/move triviality San Diego Complete 8.0
P0608R3 LWG A sane variant converting constructor San Diego Complete 9.0
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 Complete 12.0
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
 
           
P0339R6 LWG polymorphic_allocator<> as a vocabulary type Kona    
P0340R3 LWG Making std::underlying_type SFINAE-friendly Kona Complete 9.0
P0738R2 LWG I Stream, You Stream, We All Stream for istream_iterator Kona    
P0811R3 LWG Well-behaved interpolation for numbers and pointers Kona Complete 9.0
P0920R2 LWG Precalculated hash values in lookup Kona Reverted by P1661  
P1001R2 LWG Target Vectorization Policies from Parallelism V2 TS to C++20 Kona    
P1024R3 LWG Usability Enhancements for std::span Kona Complete 9.0
P1164R1 LWG Make create_directory() Intuitive Kona Complete 12.0
P1227R2 LWG Signed ssize() functions, unsigned size() functions Kona Complete 9.0
P1252R2 LWG Ranges Design Cleanup Kona    
P1286R2 CWG Contra CWG DR1778 Kona    
P1357R1 LWG Traits for [Un]bounded Arrays Kona Complete 9.0
P1458R1 LWG Mandating the Standard Library: Clause 16 - Language support library Kona Complete 9.0
P1459R1 LWG Mandating the Standard Library: Clause 18 - Diagnostics library Kona Complete 9.0
P1462R1 LWG Mandating the Standard Library: Clause 20 - Strings library Kona Complete 9.0
P1463R1 LWG Mandating the Standard Library: Clause 21 - Containers library Kona    
P1464R1 LWG Mandating the Standard Library: Clause 22 - Iterators library Kona Complete 9.0
           
P0325 LWG to_array from LFTS with updates Cologne Complete 10.0
P0408 LWG Efficient Access to basic_stringbuf’s Buffer Cologne    
P0466 LWG Layout-compatibility and Pointer-interconvertibility Traits Cologne    
P0553 LWG Bit operations Cologne Complete 9.0
P0631 LWG Math Constants Cologne Complete 11.0
P0645 LWG Text Formatting Cologne    
P0660 LWG Stop Token and Joining Thread, Rev 10 Cologne    
P0784 CWG More constexpr containers Cologne Complete 12.0
P0980 LWG Making std::string constexpr Cologne    
P1004 LWG Making std::vector constexpr Cologne    
P1035 LWG Input Range Adaptors Cologne    
P1065 LWG Constexpr INVOKE Cologne Complete 12.0
P1135 LWG The C++20 Synchronization Library Cologne Complete 11.0
P1207 LWG Movability of Single-pass Iterators Cologne    
P1208 LWG Adopt source_location for C++20 Cologne    
P1355 LWG Exposing a narrow contract for ceil2 Cologne Complete 9.0
P1361 LWG Integration of chrono with text formatting Cologne    
P1423 LWG char8_t backward compatibility remediation Cologne In Progress  
P1424 LWG ‘constexpr’ feature macro concerns Cologne Superseded by P1902  
P1466 LWG Miscellaneous minor fixes for chrono Cologne    
P1474 LWG Helpful pointers for ContiguousIterator Cologne    
P1502 LWG Standard library header units for C++20 Cologne    
P1522 LWG Iterator Difference Type and Integer Overflow Cologne    
P1523 LWG Views and Size Types Cologne    
P1612 LWG Relocate Endian’s Specification Cologne Complete 10.0
P1614 LWG The Mothership has Landed Cologne In Progress  
P1638 LWG basic_istream_view::iterator should not be copyable Cologne    
P1643 LWG Add wait/notify to atomic_ref Cologne    
P1644 LWG Add wait/notify to atomic<shared_ptr> Cologne    
P1650 LWG Output std::chrono::days with ‘d’ suffix Cologne    
P1651 LWG bind_front should not unwrap reference_wrapper Cologne    
P1652 LWG Printf corner cases in std::format Cologne    
P1661 LWG Remove dedicated precalculated hash lookup interface Cologne Nothing To Do  
P1754 LWG Rename concepts to standard_case for C++20, while we still can Cologne    
           
P0883 LWG Fixing Atomic Initialization Belfast
 
P1391 LWG Range constructor for std::string_view Belfast
 
P1394 LWG Range constructor for std::span Belfast
 
P1456 LWG Move-only views Belfast
 
P1622 LWG Mandating the Standard Library: Clause 32 - Thread support library Belfast
 
P1645 LWG constexpr for numeric algorithms Belfast Complete 12.0
P1664 LWG reconstructible_range - a concept for putting ranges back together Belfast
 
P1686 LWG Mandating the Standard Library: Clause 27 - Time library Belfast
 
P1690 LWG Refinement Proposal for P0919 Heterogeneous lookup for unordered containers Belfast Complete 12.0
P1716 LWG ranges compare algorithm are over-constrained Belfast
 
P1718 LWG Mandating the Standard Library: Clause 25 - Algorithms library Belfast
 
P1719 LWG Mandating the Standard Library: Clause 26 - Numerics library Belfast
 
P1720 LWG Mandating the Standard Library: Clause 28 - Localization library Belfast
 
P1721 LWG Mandating the Standard Library: Clause 29 - Input/Output library Belfast
 
P1722 LWG Mandating the Standard Library: Clause 30 - Regular Expression library Belfast
 
P1723 LWG Mandating the Standard Library: Clause 31 - Atomics library Belfast
 
P1855 LWG Make <compare> freestanding Belfast
 
P1862 LWG Ranges adaptors for non-copyable iterators Belfast
 
P1865 LWG Add max() to latch and barrier Belfast Complete 11.0
P1869 LWG Rename ‘condition_variable_any’ interruptible wait methods Belfast
 
P1870 LWG forwarding-range is too subtle Belfast
 
P1871 LWG Should concepts be enabled or disabled? Belfast
 
P1872 LWG span should have size_type, not index_type Belfast Complete 10.0
P1878 LWG Constraining Readable Types Belfast
 
P1892 LWG Extended locale-specific presentation specifiers for std::format Belfast
 
P1902 LWG Missing feature-test macros 2018-2019 Belfast
 
P1959 LWG Remove std::weak_equality and std::strong_equality Belfast
 
P1960 LWG NB Comment Changes Reviewed by SG1 Belfast
 
P1961 LWG Harmonizing the definitions of total order for pointers Belfast
 
P1965 LWG Blanket Wording for Specifying “Hidden Friends” Belfast
 
           
P0586 LWG Safe integral comparisons Prague
 
P0593 CWG Implicit creation of objects for low-level object manipulation Prague
 
P1115 LWG Improving the Return Value of Erase-Like Algorithms II: Free erase/erase if Prague Complete 11.0
P1243 LWG Rangify New Algorithms Prague
 
P1460 LWG Mandating the Standard Library: Clause 20 - Utilities library Prague
 
P1739 LWG Avoid template bloat for safe_ranges in combination with “subrange-y” view adaptors Prague
 
P1831 LWG Deprecating volatile: library Prague
 
P1868 LWG width: clarifying units of width and precision in std::format Prague
 
P1908 CWG Reserving Attribute Namespaces for Future Use Prague
 
P1937 CWG Fixing inconsistencies between constexpr and consteval functions Prague
 
P1956 LWG On the names of low-level bit manipulation functions Prague Complete 12.0
P1957 CWG Converting from T* to bool should be considered narrowing (re: US 212) Prague
 
P1963 LWG Fixing US 313 Prague
 
P1964 LWG Wording for boolean-testable Prague
 
P1970 LWG Consistency for size() functions: Add ranges::ssize Prague
 
P1973 LWG Rename “_default_init” Functions, Rev1 Prague
 
P1976 LWG Fixed-size span construction from dynamic range Prague Complete 11.0
P1981 LWG Rename leap to leap_second Prague
 
P1982 LWG Rename link to time_zone_link Prague
 
P1983 LWG Wording for GB301, US296, US292, US291, and US283 Prague
 
P1994 LWG elements_view needs its own sentinel Prague
 
P2002 CWG Defaulted comparison specification cleanups Prague
 
P2045 LWG Missing Mandates for the standard library Prague
 
P2085 CWG Consistent defaulted comparisons Prague
 
P2091 LWG Issues with range access CPOs Prague
 
P2101 LWG ‘Models’ subsumes ‘satisfies’ (Wording for US298 and US300) Prague
 
P2102 LWG Make ‘implicit expression variations’ more explicit (Wording for US185) Prague
 
P2106 LWG Alternative wording for GB315 and GB316 Prague
 
P2116 LWG Remove tuple-like protocol support from fixed-extent span Prague Complete 11.0

Note

[1]P0600: The missing bits in P0600 are in §[mem.res.class], §[mem.poly.allocator.class], and §[container.node.overview].
[2]P0966: It was previously erroneously marked as complete in version 8.0. See bug 45368.
[3]P0619: Only std::allocator part is implemented.

Library Working Group Issues Status

Issue # Issue Name Meeting Status First released version
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 Nothing To Do  
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 Nothing To Do  
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<T> conversion from T&& 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 Complete  
         
2164 What are the semantics of vector.emplace(vector.begin(), vector.back())? Jacksonville Complete  
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 Complete  
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 Complete  
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 Complete  
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 Nothing To Do  
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 Complete  
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 Complete  
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 Complete  
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 Complete  
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    
         
3012 atomic<T> is unimplementable for non-is_trivially_copy_constructible T Kona    
3040 basic_string_view::starts_with Effects are incorrect Kona Complete  
3077 (push|emplace)_back should invalidate the end iterator Kona Nothing To Do  
3087 One final &x in §[list.ops] Kona Nothing To Do  
3101 span’s Container constructors need another constraint Kona Complete  
3112 system_error and filesystem_error constructors taking a string may not be able to meet their postconditions Kona    
3119 Program-definedness of closure types Kona Nothing To Do  
3133 Modernizing numeric type requirements Kona    
3144 span does not have a ``const_pointer`` typedef Kona Complete  
3173 Enable CTAD for ``ref-view`` Kona    
3179 subrange should always model Range Kona    
3180 Inconsistently named return type for ranges::minmax_element Kona    
3182 Specification of Same could be clearer Kona    
         
2899 is_(nothrow_)move_constructible and tuple, optional and unique_ptr Cologne    
3055 path::operator+=(*single-character*) misspecified Cologne Complete 7.0
3158 tuple(allocator_arg_t, const Alloc&) should be conditionally explicit Cologne    
3169 ranges permutation generators discard useful information Cologne    
3183 Normative permission to specialize Ranges variable templates Cologne    
3184 Inconsistencies in bind_front wording Cologne    
3185 Uses-allocator construction functions missing constexpr and noexcept Cologne    
3186 ranges removal, partition, and partial_sort_copy algorithms discard useful information Cologne    
3187 P0591R4 reverted DR 2586 fixes to scoped_allocator_adaptor::construct() Cologne    
3191 std::ranges::shuffle synopsis does not match algorithm definition Cologne    
3196 std::optional<T> is ill-formed is T is an array Cologne Complete  
3198 Bad constraint on std::span::span() Cologne Complete  
3199 istream >> bitset<0> fails Cologne    
3202 P0318R1 was supposed to be revised Cologne Complete  
3206 year_month_day conversion to sys_days uses not-existing member function Cologne Complete  
3208 Boolean’s expression requirements are ordered inconsistently Cologne Nothing To Do  
3209 Expression in year::ok() returns clause is ill-formed Cologne Complete  
         
3231 year_month_day_last::day specification does not cover !ok() values Belfast Nothing To Do  
3225 zoned_time converting constructor shall not be noexcept Belfast    
3190 std::allocator::allocate sometimes returns too little storage Belfast    
3218 Modifier for %d parse flag does not match POSIX and format specification Belfast    
3224 zoned_time constructor from TimeZonePtr does not specify initialization of tp_ Belfast    
3230 Format specifier %y/%Y is missing locale alternative versions Belfast    
3232 Inconsistency in zoned_time deduction guides Belfast    
3222 P0574R1 introduced preconditions on non-existent parameters Belfast    
3221 Result of year_month arithmetic with months is ambiguous Belfast Complete 8.0
3235 parse manipulator without abbreviation is not callable Belfast    
3246 What are the constraints on the template parameter of basic_format_arg? Belfast    
3253 basic_syncbuf::basic_syncbuf() should not be explicit Belfast    
3245 Unnecessary restriction on '%p' parse specifier Belfast    
3244 Constraints for Source in §[fs.path.req] insufficiently constrainty Belfast    
3241 chrono-spec grammar ambiguity in §[time.format] Belfast    
3257 Missing feature testing macro update from P0858 Belfast    
3256 Feature testing macro for constexpr algorithms Belfast    
3273 Specify weekday_indexed to range of [0, 7] Belfast    
3070 path::lexically_relative causes surprising results if a filename can also be a root-name Belfast    
3266 to_chars(bool) should be deleted Belfast    
3272 %I%p should parse/format duration since midnight Belfast    
3259 The definition of constexpr iterators should be adjusted Belfast    
3103 Errors in taking subview of span should be ill-formed where possible Belfast    
3274 Missing feature test macro for <span> Belfast    
3276 Class split_view::outer_iterator::value_type should inherit from view_interface Belfast    
3277 Pre-increment on prvalues is not a requirement of weakly_incrementable Belfast    
3149 DefaultConstructible should require default initialization Belfast    
         
1203 More useful rvalue stream insertion Prague Complete 12.0
2859 Definition of reachable in [ptr.launder] misses pointer arithmetic from pointer-interconvertible object Prague    
3018 shared_ptr of function type Prague    
3050 Conversion specification problem in chrono::duration constructor Prague    
3141 CopyConstructible doesn’t preserve source values Prague    
3150 UniformRandomBitGenerator should validate min and max Prague    
3175 The CommonReference requirement of concept SwappableWith is not satisfied in the example Prague    
3194 ConvertibleTo prose does not match code Prague    
3200 midpoint should not constrain T is complete Prague Nothing To Do  
3201 lerp should be marked as noexcept Prague Complete  
3226 zoned_time constructor from string_view should accept zoned_time<Duration2, TimeZonePtr2> Prague    
3233 Broken requirements for shared_ptr converting constructors Prague    
3237 LWG 3038 and 3190 have inconsistent PRs Prague    
3238 Insufficiently-defined behavior of std::function deduction guides Prague    
3242 std::format: missing rules for arg-id in width and precision Prague    
3243 std::format and negative zeroes Prague    
3247 ranges::iter_move should perform ADL-only lookup of iter_move Prague    
3248 std::format #b, #B, #o, #x, and #X presentation types misformat negative numbers Prague    
3250 std::format: # (alternate form) for NaN and inf Prague    
3251 Are std::format alignment specifiers applied to string arguments? Prague    
3252 Parse locale’s aware modifiers for commands are not consistent with POSIX spec Prague    
3254 Strike stop_token’s operator!= Prague    
3255 span’s array constructor is too strict Prague Complete  
3260 year_month* arithmetic rejects durations convertible to years Prague    
3262 Formatting of negative durations is not specified Prague    
3264 sized_range and ranges::size redundantly use disable_sized_range Prague    
3269 Parse manipulators do not specify the result of the extraction from stream Prague    
3270 Parsing and formatting %j with durations Prague    
3280 View converting constructors can cause constraint recursion and are unneeded Prague    
3281 Conversion from *pair-like* types to subrange is a silent semantic promotion Prague    
3282 subrange converting constructor should disallow derived to base conversions Prague    
3284 random_access_iterator semantic constraints accidentally promote difference type using unary negate Prague    
3285 The type of a customization point object shall satisfy semiregular Prague    
3286 ranges::size is not required to be valid after a call to ranges::begin on an input range Prague    
3291 iota_view::iterator has the wrong iterator_category Prague    
3292 iota_view is under-constrained Prague    
3294 zoned_time deduction guides misinterprets string/char* Prague    
3296 Inconsistent default argument for basic_regex<>::assign Prague Complete  
3299 Pointers don’t need customized iterator behavior Prague    
3300 Non-array ssize overload is underconstrained Prague    
3301 transform_view::iterator has incorrect iterator_category Prague    
3302 Range adaptor objects keys and values are unspecified Prague    
3303 Bad “constexpr” marker for destroy/destroy_n Prague    
3304 Allocate functions of std::polymorphic_allocator should require [[nodiscard]] Prague    
3307 std::allocator<void>().allocate(n) Prague    
3310 Replace SIZE_MAX with numeric_limits<size_t>::max() Prague    
3313 join_view::iterator::operator-- is incorrectly constrained Prague    
3314 Is stream insertion behavior locale dependent when Period::type is micro? Prague    
3315 Correct Allocator Default Behavior Prague    
3316 Correctly define epoch for utc_clock / utc_timepoint Prague    
3317 Incorrect operator<< for floating-point durations Prague    
3318 Clarify whether clocks can represent time before their epoch Prague    
3319 Properly reference specification of IANA time zone database Prague    
3320 span::cbegin/cend methods produce different results than std::[ranges::]cbegin/cend Prague Complete  
3321 uninitialized_construct_using_allocator should use construct_at Prague    
3323 *has-tuple-element* helper concept needs convertible_to Prague    
3324 Special-case std::strong/weak/partial_order for pointers Prague    
3325 Constrain return type of transformation function for transform_view Prague    
3326 enable_view has false positives Prague    
3327 Format alignment specifiers vs. text direction Prague    
3328 Clarify that std::string is not good for UTF-8 Prague    
3329 totally_ordered_with both directly and indirectly requires common_reference_with Prague    
3330 Include <compare> from most library headers Prague    
3331 Define totally_ordered/_with in terms of *partially-ordered-with* Prague    
3332 Issue in §[time.format] Prague    
3334 basic_osyncstream move assignment and destruction calls basic_syncbuf::emit() twice Prague    
3335 Resolve C++20 NB comments US 273 and GB 274 Prague    
3338 Rename default_constructible to default_initializable Prague    
3340 Formatting functions should throw on argument/format string mismatch in §[format.functions] Prague    
3346 pair and tuple copy and move constructor have backwards specification Prague    
3347 std::pair<T, U> now requires T and U to be less-than-comparable Prague    
3348 __cpp_lib_unwrap_ref in wrong header Prague    
3349 Missing __cpp_lib_constexpr_complex for P0415R1 Prague    
3350 Simplify return type of lexicographical_compare_three_way Prague    
3351 ranges::enable_safe_range should not be constrained Prague    
3352 strong_equality isn’t a thing Prague    
3354 has_strong_structural_equality has a meaningless definition Prague    
3355 The memory algorithms should support move-only input iterators introduced by P1207 Prague    
3356 __cpp_lib_nothrow_convertible should be __cpp_lib_is_nothrow_convertible Prague    
3358 §[span.cons] is mistaken that to_address can throw Prague    
3359 <chrono> leap second support should allow for negative leap seconds Prague    
3360 three_way_comparable_with is inconsistent with similar concepts Prague    
3362 Strike stop_source’s operator!= Prague    
3363 drop_while_view should opt-out of sized_range Prague    
3364 Initialize data members of ranges and their iterators Prague    
3367 Integer-class conversions should not throw Prague    
3369 span’s deduction-guide for built-in arrays doesn’t work Prague    
3371 visit_format_arg and make_format_args are not hidden friends Prague    
3372 vformat_to should not try to deduce Out twice Prague    
3373 {to,from}_chars_result and format_to_n_result need the “we really mean what we say” wording Prague    
3374 P0653 + P1006 should have made the other std::to_address overload constexpr Prague Complete 12.0
3375 decay in viewable_range should be remove_cvref Prague    
3377 elements_view::iterator befriends a specialization of itself Prague    
3379 safe” in several library names is misleading Prague    
3380 common_type and comparison categories Prague    
3381 begin and data must agree for contiguous_range Prague    
3382 NTTP for pair and array Prague    
3383 §[time.zone.leap.nonmembers] sys_seconds should be replaced with seconds Prague    
3384 transform_view::*sentinel* has an incorrect operator- Prague    
3385 common_iterator is not sufficiently constrained for non-copyable iterators Prague    
3387 §[range.reverse.view] reverse_view<V> unintentionally requires range<const V> Prague    
3388 view iterator types have ill-formed <=> operators Prague    
3389 A move-only iterator still does not have a counted_iterator Prague    
3390 make_move_iterator() cannot be used to construct a move_iterator for a move-only iterator Prague    
3393 Missing/incorrect feature test macro for coroutines Prague    
3395 Definition for three-way comparison needs to be updated (US 152) Prague    
3396 Clarify point of reference for source_location::current() (DE 169) Prague    
3397 ranges::basic_istream_view::iterator should not provide iterator_category Prague    
3398 tuple_element_t is also wrong for const subrange Prague    

Last Updated: 24-Nov-2020