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 |
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 duration s |
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