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 | 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 | 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 | 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 | ||
| 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 | Complete | |
| 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 | Complete | 9.0 |
| P0619R4 | LWG | Reviewing Deprecated Facilities of C++17 for C++20 | Rapperswil | ||
| 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 | ||
| 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 | Complete | 8.0 |
| 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 | 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 | ||
| 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 | ||
| 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 | ||
| 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 | ||
| P0645 | LWG | Text Formatting | Cologne | ||
| P0660 | LWG | Stop Token and Joining Thread, Rev 10 | Cologne | ||
| P0784 | CWG | More constexpr containers | Cologne | ||
| 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 | ||
| P1135 | LWG | The C++20 Synchronization Library | Cologne | Complete | |
| 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 | ||
| P1424 | LWG | 'constexpr' feature macro concerns | Cologne | ||
| 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 | ||
| 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 | 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 | ||
| 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 | ||
| 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 | ||
| 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 | ||
| 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 | ||
| 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 |
[ 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 | 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 | 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 | 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 | 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 | Complete |
| 3055 | path::operator+=(single-character) misspecified | Cologne | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 3201 | lerp should be marked as noexcept | Prague | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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: 16-Feb-2020