libc++ C++23 Status¶
Overview¶
In November 2020, the C++ standard committee adopted the first changes to the next version of the C++ standard, known here as “C++2b” (probably to be C++23). In February 2023, the C++ standard committee approved this draft, and sent it to ISO for approval as C++23.
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 | Labels |
---|---|---|---|---|---|---|
P0881R7 | LWG | A Proposal to add stacktrace library | Autumn 2020 | |||
P0943R6 | LWG | Support C atomics in C++ | Autumn 2020 | Complete | 15.0 | |
P1048R1 | LWG | A proposal for a type trait to detect scoped enumerations | Autumn 2020 | Complete | 12.0 | |
P1679R3 | LWG | string contains function | Autumn 2020 | Complete | 12.0 | |
P1682R3 | LWG | std::to_underlying for enumerations | February 2021 | Complete | 13.0 | |
P2017R1 | LWG | Conditionally borrowed ranges | February 2021 | ranges | ||
P2160R1 | LWG | Locks lock lockables | February 2021 | |||
P2162R2 | LWG | Inheriting from std::variant | February 2021 | Complete | 13.0 | |
P2212R2 | LWG | Relax Requirements for time_point::clock | February 2021 | |||
P2259R1 | LWG | Repairing input range adaptors and counted_iterator | February 2021 | ranges | ||
P0401R6 | LWG | Providing size feedback in the Allocator interface | June 2021 | Complete | 15.0 | |
P0448R4 | LWG | A strstream replacement using span<charT> as buffer | June 2021 | |||
P1132R8 | LWG | out_ptr - a scalable output pointer abstraction | June 2021 | |||
P1328R1 | LWG | Making std::type_info::operator== constexpr | June 2021 | Complete | 17.0 | |
P1425R4 | LWG | Iterators pair constructors for stack and queue | June 2021 | Complete | 14.0 | ranges |
P1518R2 | LWG | Stop overconstraining allocators in container deduction guides | June 2021 | Complete | 13.0 | |
P1659R3 | LWG | starts_with and ends_with | June 2021 | ranges | ||
P1951R1 | LWG | Default Arguments for pair Forwarding Constructor | June 2021 | Complete | 14.0 | |
P1989R2 | LWG | Range constructor for std::string_view | June 2021 | Complete | 14.0 | ranges |
P2136R3 | LWG | invoke_r | June 2021 | Complete | 17.0 | |
P2166R1 | LWG | A Proposal to Prohibit std::basic_string and std::basic_string_view construction from nullptr | June 2021 | Complete | 13.0 | |
P0288R9 | LWG | any_invocable |
October 2021 | |||
P0798R8 | LWG | Monadic operations for std::optional |
October 2021 | Complete | 14.0 | |
P0849R8 | LWG | auto(x) : DECAY_COPY in the language |
October 2021 | Complete | 14.0 | |
P1072R10 | LWG | basic_string::resize_and_overwrite |
October 2021 | Complete | 14.0 | |
P1147R1 | LWG | Printing volatile Pointers |
October 2021 | Complete | 14.0 | |
P1272R4 | LWG | Byteswapping for fun&&nuf | October 2021 | Complete | 14.0 | |
P1675R2 | LWG | rethrow_exception must be allowed to copy |
October 2021 | |||
P2077R3 | LWG | Heterogeneous erasure overloads for associative containers | October 2021 | |||
P2251R1 | LWG | Require span & basic_string_view to be Trivially Copyable |
October 2021 | Complete | 14.0 | |
P2301R1 | LWG | Add a pmr alias for std::stacktrace |
October 2021 | |||
P2321R2 | LWG | zip |
October 2021 | In Progress | ranges | |
P2340R1 | LWG | Clarifying the status of the ‘C headers’ | October 2021 | |||
P2393R1 | LWG | Cleaning up integer -class types |
October 2021 | |||
P2401R0 | LWG | Add a conditional noexcept specification to std::exchange |
October 2021 | Complete | 14.0 | |
P0323R12 | LWG | std::expected |
February 2022 | Complete | 16.0 | |
P0533R9 | LWG | constexpr for <cmath> and <cstdlib> |
February 2022 | In Progress [1] | ||
P0627R6 | LWG | Function to mark unreachable code | February 2022 | Complete | 15.0 | |
P1206R7 | LWG | ranges::to : A function to convert any range to a container |
February 2022 | In Progress | ranges | |
P1413R3 | LWG | Deprecate std::aligned_storage and std::aligned_union |
February 2022 | Complete [2] | ||
P2255R2 | LWG | A type trait to detect reference binding to temporary | February 2022 | |||
P2273R3 | LWG | Making std::unique_ptr constexpr |
February 2022 | Complete | 16.0 | |
P2387R3 | LWG | Pipe support for user-defined range adaptors | February 2022 | ranges | ||
P2440R1 | LWG | ranges::iota , ranges::shift_left and ranges::shift_right |
February 2022 | ranges | ||
P2441R2 | LWG | views::join_with |
February 2022 | ranges | ||
P2442R1 | LWG | Windowing range adaptors: views::chunk and views::slide |
February 2022 | ranges | ||
P2443R1 | LWG | views::chunk_by |
February 2022 | ranges | ||
P0009R18 | LWG | mdspan: A Non-Owning Multidimensional Array Reference | July 2022 | In Progress | ||
P0429R9 | LWG | A Standard flat_map |
July 2022 | |||
P1169R4 | LWG | static operator() |
July 2022 | Complete | 16.0 | |
P1222R4 | LWG | A Standard flat_set |
July 2022 | |||
P1223R5 | LWG | ranges::find_last() , ranges::find_last_if() , and ranges::find_last_if_not() |
July 2022 | ranges | ||
P1467R9 | LWG | Extended floating-point types and standard names |
July 2022 | |||
P1642R11 | LWG | Freestanding [utilities] , [ranges] , and [iterators] |
July 2022 | |||
P1899R3 | LWG | stride_view |
July 2022 | ranges | ||
P2093R14 | LWG | Formatted output | July 2022 | |||
P2165R4 | LWG | Compatibility between tuple , pair and tuple-like objects |
July 2022 | |||
P2278R4 | LWG | cbegin should always return a constant iterator |
July 2022 | ranges | ||
P2286R8 | LWG | Formatting Ranges | July 2022 | Complete | 16.0 | format ranges |
P2291R3 | LWG | Add Constexpr Modifiers to Functions to_chars and from_chars for Integral Types in <charconv> Header |
July 2022 | Complete | 16.0 | |
P2302R4 | LWG | std::ranges::contains |
July 2022 | ranges | ||
P2322R6 | LWG | ranges::fold |
July 2022 | ranges | ||
P2374R4 | LWG | views::cartesian_product |
July 2022 | ranges | ||
P2404R3 | LWG | Move-only types for equality_comparable_with , totally_ordered_with , and three_way_comparable_with |
July 2022 | |||
P2408R5 | LWG | Ranges iterators as inputs to non-Ranges algorithms | July 2022 | ranges | ||
P2417R2 | LWG | A more constexpr bitset |
July 2022 | Complete | 16.0 | |
P2419R2 | LWG | Clarify handling of encodings in localized formatting of chrono types | July 2022 | |||
P2438R2 | LWG | std::string::substr() && |
July 2022 | Complete | 16.0 | |
P2445R1 | LWG | forward_like |
July 2022 | Complete | 16.0 | |
P2446R2 | LWG | views::as_rvalue |
July 2022 | Complete | 16.0 | ranges |
P2460R2 | LWG | Relax requirements on wchar_t to match existing practices |
July 2022 | |||
P2465R3 | LWG | Standard Library Modules std and std.compat |
July 2022 | |||
P2467R1 | LWG | Support exclusive mode for fstreams |
July 2022 | |||
P2474R2 | LWG | views::repeat |
July 2022 | ranges | ||
P2494R2 | LWG | Relaxing range adaptors to allow for move only types | July 2022 | ranges | ||
P2499R0 | LWG | string_view range constructor should be explicit |
July 2022 | Complete | 16.0 | ranges |
P2502R2 | LWG | std::generator : Synchronous Coroutine Generator for Ranges |
July 2022 | ranges | ||
P2508R1 | LWG | Exposing std::basic-format-string |
July 2022 | Complete | 15.0 | |
P2513R4 | LWG | char8_t Compatibility and Portability Fixes |
July 2022 | |||
P2517R1 | LWG | Add a conditional noexcept specification to std::apply |
July 2022 | |||
P2520R0 | LWG | move_iterator should be a random access iterator |
July 2022 | Complete [3] | 17.0 | ranges |
P2540R1 | LWG | Empty Product for certain Views | July 2022 | ranges | ||
P2549R1 | LWG | std::unexpected should have error() as member accessor |
July 2022 | Complete | 16.0 | |
P2553R1 | LWG | Make mdspan size_type controllable |
July 2022 | |||
P2554R0 | LWG | C-Array Interoperability of MDSpan | July 2022 | |||
P2585R0 | LWG | Improving default container formatting | July 2022 | Complete | 17.0 | |
P2590R2 | LWG | Explicit lifetime management | July 2022 | |||
P2599R2 | LWG | mdspan::size_type should be index_type |
July 2022 | |||
P2604R0 | LWG | mdspan: rename pointer and contiguous | July 2022 | |||
P2613R1 | LWG | Add the missing empty to mdspan |
July 2022 | |||
P1202R5 | LWG | Asymmetric Fences | November 2022 | concurrency TS | ||
P1264R2 | LWG | Revising the wording of stream input operations |
November 2022 | Complete | 9.0 | |
P1478R8 | LWG | Byte-wise atomic memcpy |
November 2022 | concurrency TS | ||
P2167R3 | LWG | Improved Proposed Wording for LWG 2114 | November 2022 | |||
P2396R1 | LWG | Concurrency TS 2 fixes | November 2022 | concurrency TS | ||
P2505R5 | LWG | Monadic Functions for std::expected |
November 2022 | Complete | 17.0 | |
P2539R4 | LWG | Should the output of std::print to a terminal be synchronized with the underlying stream? |
November 2022 | format | ||
P2602R2 | LWG | Poison Pills are Too Toxic | November 2022 | ranges | ||
P2708R1 | LWG | No Further Fundamentals TSes | November 2022 | Nothing To Do | ||
P0290R4 | LWG | apply() for synchronized_value<T> |
February 2023 | concurrency TS | ||
P2770R0 | LWG | Stashing stashing iterators for proper flattening |
February 2023 | ranges | ||
P2164R9 | LWG | views::enumerate |
February 2023 | ranges | ||
P2711R1 | LWG | Making multi-param constructors of views explicit |
February 2023 | Partial [4] | ranges | |
P2609R3 | LWG | Relaxing Ranges Just A Smidge | February 2023 | ranges | ||
P2713R1 | LWG | Escaping improvements in std::format |
February 2023 | format | ||
P2675R1 | LWG | format ’s width estimation is too approximate and not forward compatible |
February 2023 | Complete | 17.0 | format |
P2572R1 | LWG | std::format fill character allowances |
February 2023 | Complete | 17.0 | format |
P2693R1 | LWG | Formatting thread::id and stacktrace |
February 2023 | Partial [5] | format | |
P2679R2 | LWG | Fixing std::start_lifetime_as for arrays |
February 2023 | |||
P2674R1 | LWG | A trait for implicit lifetime types | February 2023 | |||
P2655R3 | LWG | common_reference_t of reference_wrapper Should Be a Reference Type |
February 2023 | |||
P2652R2 | LWG | Disallow User Specialization of allocator_traits |
February 2023 | |||
P2787R1 | LWG | pmr::generator - Promise Types are not Values |
February 2023 | |||
P2614R2 | LWG | Deprecate numeric_limits::has_denorm |
February 2023 | |||
P2588R3 | LWG | barrier ’s phase completion guarantees |
February 2023 | |||
P2763R1 | LWG | layout_stride static extents default constructor fix |
February 2023 | |||
P2736R2 | CWG | Referencing The Unicode Standard | February 2023 | format |
Note
[1] | P0533R9: isfinite , isinf , isnan and isnormal are implemented. |
[2] | P1413R3: std::aligned_storage_t and std::aligned_union_t are marked deprecated, but
clang doesn’t issue a diagnostic for deprecated using template declarations. |
[3] | P2520R0: Libc++ implemented this paper as a DR in C++20 as well. |
[4] | P2711R1: join_with_view hasn’t been done yet since this type isn’t implemented yet. |
[5] | P1413R3: The formatter for std::thread::id is implemented.
The formatter for stacktrace is not implemented, since stacktrace is
not implemented yet. |
Library Working Group Issues Status¶
Issue # | Issue Name | Meeting | Status | First released version | Labels |
---|---|---|---|---|---|
2839 | Self-move-assignment of library types, again | November 2020 | Nothing To Do | ||
3117 | Missing packaged_task deduction guides |
November 2020 | Complete | 16.0 | |
3143 | monotonic_buffer_resource growth policy is unclear |
November 2020 | |||
3195 | What is the stored pointer value of an empty weak_ptr ? |
November 2020 | Nothing To Do | ||
3211 | std::tuple<> should be trivially constructible |
November 2020 | Complete | 9.0 | |
3236 | Random access iterator requirements lack limiting relational operators domain to comparing those from the same range | November 2020 | Nothing To Do | ||
3265 | move_iterator ’s conversions are more broken after P1207 |
November 2020 | Fixed by LWG3435 | ||
3435 | three_way_comparable_with<reverse_iterator<int*>, reverse_iterator<const int*>> |
November 2020 | Complete | 13.0 | |
3432 | Missing requirement for comparison_category |
November 2020 | Complete | 16.0 | spaceship |
3447 | Deduction guides for take_view and drop_view have different constraints |
November 2020 | Complete | 14.0 | ranges |
3450 | The const overloads of take_while_view::begin/end are underconstrained |
November 2020 | Complete | 16.0 | ranges |
3464 | istream::gcount() can overflow |
November 2020 | |||
2731 | Existence of lock_guard<MutexTypes...>::mutex_type typedef unclear |
November 2020 | Complete | 5.0 | |
2743 | P0083R3 node_handle private members missing “exposition only” comment |
November 2020 | Nothing To Do | ||
2820 | Clarify <cstdint> macros |
November 2020 | Nothing To Do | ||
3120 | Unclear behavior of monotonic_buffer_resource::release() |
November 2020 | |||
3170 | is_always_equal added to std::allocator makes the standard library treat derived types as always equal |
November 2020 | |||
3036 | polymorphic_allocator::destroy is extraneous |
November 2020 | |||
3171 | LWG2989 breaks directory_entry stream insertion |
November 2020 | Complete | 14.0 | |
3306 | ranges::advance violates its preconditions |
November 2020 | Complete | 14.0 | ranges |
3403 | Domain of ranges::ssize(E) doesn’t match ranges::size(E) |
November 2020 | ranges | ||
3404 | Finish removing subrange’s conversions from pair-like | November 2020 | ranges | ||
3405 | common_view ’s converting constructor is bad, too |
November 2020 | Complete | 14.0 | ranges |
3406 | elements_view::begin() and elements_view::end() have incompatible constraints |
November 2020 | Complete | 16.0 | ranges |
3419 | [algorithms.requirements]/15 doesn’t reserve as many rights as it intends to | November 2020 | Nothing To Do | ||
3420 | cpp17-iterator should check that the type looks like an iterator first | November 2020 | Complete | 14.0 | ranges |
3421 | Imperfect ADL emulation for boolean-testable | November 2020 | Nothing To Do | ranges | |
3425 | condition_variable_any fails to constrain its Lock parameters |
November 2020 | Nothing To Do | ||
3426 | operator<=>(const unique_ptr<T, D>&, nullptr_t) can’t get no satisfaction |
November 2020 | Complete | 16.0 | spaceship |
3427 | operator<=>(const shared_ptr<T>&, nullptr_t) definition ill-formed |
November 2020 | Complete | 16.0 | spaceship |
3428 | single_view ’s in place constructor should be explicit |
November 2020 | Complete | 14.0 | ranges |
3434 | ios_base never reclaims memory for iarray and parray |
November 2020 | Nothing To Do | ||
3437 | __cpp_lib_polymorphic_allocator is in the wrong header |
November 2020 | Complete | 14.0 | |
3446 | indirectly_readable_traits ambiguity for types with both value_type and element_type |
November 2020 | Complete | 14.0 | ranges |
3448 | transform_view ’s sentinel<false> not comparable with iterator<true> |
November 2020 | ranges | ||
3449 | take_view and take_while_view ’s sentinel<false> not comparable with their const iterator |
November 2020 | Complete | 16.0 | ranges |
3453 | Generic code cannot call ranges::advance(i, s) |
November 2020 | Nothing To Do | ranges | |
3455 | Incorrect Postconditions on unique_ptr move assignment |
November 2020 | Nothing To Do | ||
3460 | Unimplementable noop_coroutine_handle guarantees |
November 2020 | Complete | 14.0 | |
3461 | convertible_to ’s description mishandles cv-qualified void |
November 2020 | Nothing To Do | ||
3465 | compare_partial_order_fallback requires F < E |
November 2020 | Complete | 14.0 | spaceship |
3466 | Specify the requirements for promise /future /shared_future consistently |
November 2020 | Nothing To Do | ||
3467 | bool can’t be an integer-like type |
November 2020 | Complete | 14.0 | ranges |
3472 | counted_iterator is missing preconditions |
November 2020 | Complete | 14.0 | ranges |
3473 | Normative encouragement in non-normative note | November 2020 | Complete | 15.0 | format |
3474 | Nesting join_views is broken because of CTAD |
November 2020 | Complete | 15.0 | ranges |
3476 | thread and jthread constructors require that the parameters be move-constructible but never move construct the parameters |
November 2020 | |||
3477 | Simplify constraints for semiregular-box |
November 2020 | ranges | ||
3482 | drop_view ’s const begin should additionally require sized_range |
November 2020 | Complete | 14.0 | ranges |
3483 | transform_view::iterator ’s difference is overconstrained |
November 2020 | Complete | 14.0 | ranges |
3391 | Problems with counted_iterator /move_iterator::base() const & |
February 2021 | ranges | ||
3433 | subrange::advance(n) has UB when n < 0 |
February 2021 | Complete | 14.0 | ranges |
3490 | ranges::drop_while_view::begin() is missing a precondition |
February 2021 | Nothing To Do | ranges | |
3492 | Minimal improvements to elements_view::iterator |
February 2021 | Complete | 16.0 | ranges |
3494 | Allow ranges to be conditionally borrowed | February 2021 | Superseded by P2017R1 | ranges | |
3495 | constexpr launder makes pointers to inactive members of unions usable |
February 2021 | Nothing To Do | ||
3500 | join_view::iterator::operator->() is bogus |
February 2021 | Complete | 14.0 | ranges |
3502 | elements_view should not be allowed to return dangling reference |
February 2021 | Complete | 16.0 | ranges |
3505 | split_view::outer-iterator::operator++ misspecified |
February 2021 | ranges | ||
2774 | std::function construction vs assignment |
June 2021 | |||
2818 | ::std:: everywhere rule needs tweaking |
June 2021 | Nothing To Do | ||
2997 | LWG 491 and the specification of {forward_,}list::unique |
June 2021 | |||
3410 | lexicographical_compare_three_way is overspecified |
June 2021 | Complete | 17.0 | spaceship |
3430 | std::fstream & co. should be constructible from string_view |
June 2021 | |||
3462 | §[formatter.requirements]: Formatter requirements forbid use of fc.arg() |
June 2021 | format | ||
3481 | viewable_range mishandles lvalue move-only views |
June 2021 | Superseded by P2415R2 | ranges | |
3506 | Missing allocator-extended constructors for priority_queue |
June 2021 | Complete | 14.0 | |
3517 | join_view::iterator ’s iter_swap is underconstrained |
June 2021 | Complete | 14.0 | ranges |
3518 | Exception requirements on char trait operations unclear | June 2021 | Nothing To Do | ||
3519 | Incomplete synopses for <random> classes |
June 2021 | |||
3520 | iter_move and iter_swap are inconsistent for transform_view::iterator |
June 2021 | Complete | 14.0 | ranges |
3521 | Overly strict requirements on qsort and bsearch |
June 2021 | Nothing To Do | ||
3522 | Missing requirement on InputIterator template parameter for priority_queue constructors |
June 2021 | Complete | 14.0 | |
3523 | iota_view::sentinel is not always iota_view ’s sentinel |
June 2021 | ranges | ||
3526 | Return types of uses_allocator_construction_args unspecified |
June 2021 | |||
3527 | uses_allocator_construction_args handles rvalue pairs of rvalue references incorrectly |
June 2021 | |||
3528 | make_from_tuple can perform (the equivalent of) a C-style cast |
June 2021 | |||
3529 | priority_queue(first, last) should construct c with (first, last) |
June 2021 | Complete | 14.0 | |
3530 | BUILTIN-PTR-MEOW should not opt the type out of syntactic checks |
June 2021 | |||
3532 | split_view<V, P>::inner-iterator<true>::operator++(int) should depend on Base |
June 2021 | ranges | ||
3533 | Make base() const & consistent across iterator wrappers that supports input_iterators |
June 2021 | Complete | 14.0 | ranges |
3536 | Should chrono::from_stream() assign zero to duration for failure? |
June 2021 | chrono | ||
3539 | format_to must not copy models of output_iterator<const charT&> |
June 2021 | Complete | 14.0 | format |
3540 | §[format.arg] There should be no const in basic_format_arg(const T* p) |
June 2021 | Complete | 14.0 | format |
3541 | indirectly_readable_traits should be SFINAE-friendly for all types |
June 2021 | Complete | 14.0 | ranges |
3542 | basic_format_arg mishandles basic_string_view with custom traits |
June 2021 | Complete | 14.0 | format |
3543 | Definition of when counted_iterators refer to the same sequence isn’t quite right |
June 2021 | Nothing To Do | ranges | |
3544 | format-arg-store::args is unintentionally not exposition-only |
June 2021 | Complete | 14.0 | format |
3546 | common_iterator ’s postfix-proxy is not quite right |
June 2021 | ranges | ||
3548 | shared_ptr construction from unique_ptr should move (not copy) the deleter |
June 2021 | Complete | 15.0 | |
3549 | view_interface is overspecified to derive from view_base |
June 2021 | Complete | 14.0 | ranges |
3551 | borrowed_{iterator,subrange}_t are overspecified |
June 2021 | Nothing To Do | ranges | |
3552 | Parallel specialized memory algorithms should require forward iterators | June 2021 | |||
3553 | Useless constraint in split_view::outer-iterator::value_type::begin() |
June 2021 | ranges | ||
3555 | {transform,elements}_view::iterator::iterator_concept should consider const-qualification of the underlying range |
June 2021 | ranges | ||
2191 | Incorrect specification of match_results(match_results&&) |
October 2021 | Nothing To Do | ||
2381 | Inconsistency in parsing floating point numbers | October 2021 | |||
2762 | unique_ptr operator*() should be noexcept |
October 2021 | |||
3121 | tuple constructor constraints for UTypes&&... overloads |
October 2021 | |||
3123 | duration constructor from representation shouldn’t be effectively non-throwing |
October 2021 | chrono | ||
3146 | Excessive unwrapping in std::ref/cref |
October 2021 | Complete | 14.0 | |
3152 | common_type and common_reference have flaws in common |
October 2021 | |||
3293 | move_iterator operator+() has incorrect constraints |
October 2021 | Complete | 15.0 | |
3361 | safe_range<SomeRange&> case |
October 2021 | Nothing To Do | ranges | |
3392 | ranges::distance() cannot be used on a move-only iterator with a sized sentinel |
October 2021 | Complete | 14.0 | ranges |
3407 | Some problems with the wording changes of P1739R4 | October 2021 | Complete | 15.0 | ranges |
3422 | Issues of seed_seq ’s constructors |
October 2021 | Complete | 14.0 | |
3470 | convertible-to-non-slicing seems to reject valid case |
October 2021 | Complete | 14.0 | ranges |
3480 | directory_iterator and recursive_directory_iterator are not C++20 ranges |
October 2021 | Complete | 14.0 | ranges |
3498 | Inconsistent noexcept -specifiers for basic_syncbuf |
October 2021 | |||
3535 | join_view::iterator::iterator_category and ::iterator_concept lie |
October 2021 | Complete | 15.0 | ranges |
3554 | chrono::parse needs const charT* and basic_string_view<charT> overloads |
October 2021 | chrono | ||
3557 | The static_cast expression in convertible_to has the wrong operand |
October 2021 | Complete | 14.0 | |
3559 | Semantic requirements of sized_range is circular |
October 2021 | Nothing To Do | ranges | |
3560 | ranges::equal and ranges::is_permutation should short-circuit for sized_ranges |
October 2021 | ranges | ||
3561 | Issue with internal counter in discard_block_engine |
October 2021 | |||
3563 | keys_view example is broken |
October 2021 | ranges | ||
3566 | Constraint recursion for operator<=>(optional<T>, U) |
October 2021 | Complete | 17.0 | spaceship |
3567 | Formatting move-only iterators take two | October 2021 | Complete | 16.0 | format ranges |
3568 | basic_istream_view needs to initialize value_ |
October 2021 | Complete | 16.0 | ranges |
3570 | basic_osyncstream::emit should be an unformatted output function |
October 2021 | |||
3571 | flush_emit should set badbit if the emit call fails |
October 2021 | |||
3572 | copyable-box should be fully constexpr |
October 2021 | Complete | 14.0 | ranges |
3573 | Missing Throws element for basic_string_view(It begin, End end) |
October 2021 | Complete | 14.0 | |
3574 | common_iterator should be completely constexpr -able |
October 2021 | Complete | 14.0 | ranges |
3580 | iota_view ’s iterator ’s binary operator+ should be improved |
October 2021 | Complete | 14.0 | ranges |
3581 | The range constructor makes basic_string_view not trivially move constructible |
October 2021 | Complete | 14.0 | ranges |
3585 | variant converting assignment with immovable alternative |
October 2021 | |||
3589 | The const lvalue reference overload of get for subrange does not constrain I to be copyable when N == 0 |
October 2021 | Complete | 14.0 | ranges |
3590 | split_view::base() const & is overconstrained |
October 2021 | Complete | 16.0 | ranges |
3591 | lazy_split_view<input_view>::inner-iterator::base() && invalidates outer iterators |
October 2021 | ranges | ||
3592 | lazy_split_view needs to check the simpleness of Pattern |
October 2021 | ranges | ||
3593 | Several iterators’ base() const & and lazy_split_view::outer-iterator::value_type::end() missing noexcept |
October 2021 | ranges | ||
3595 | Exposition-only classes proxy and postfix-proxy for common_iterator should be fully constexpr |
October 2021 | Complete | 14.0 | ranges |
3088 | forward_list::merge behaviour unclear when passed *this |
February 2022 | |||
3471 | polymorphic_allocator::allocate does not satisfy Cpp17Allocator requirements |
February 2022 | |||
3525 | uses_allocator_construction_args fails to handle types convertible to pair |
February 2022 | |||
3598 | system_category().default_error_condition(0) is underspecified |
February 2022 | |||
3601 | common_iterator’s postfix-proxy needs indirectly_readable |
February 2022 | ranges | ||
3607 | contiguous_iterator should not be allowed to have custom iter_move and iter_swap behavior |
February 2022 | Nothing To Do | ranges | |
3610 | iota_view::size sometimes rejects integer-class types |
February 2022 | ranges | ||
3612 | Inconsistent pointer alignment in std::format |
February 2022 | Complete | 14.0 | format |
3616 | LWG 3498 seems to miss the non-member swap for basic_syncbuf |
February 2022 | |||
3618 | Unnecessary iter_move for transform_view::iterator |
February 2022 | ranges | ||
3619 | Specification of vformat_to contains ill-formed formatted_size calls |
February 2022 | Nothing To Do | format | |
3621 | Remove feature-test macro __cpp_lib_monadic_optional |
February 2022 | Complete | 15.0 | |
3632 | unique_ptr “Mandates: This constructor is not selected by class template argument deduction” |
February 2022 | Nothing To Do | ||
3643 | Missing constexpr in std::counted_iterator |
February 2022 | ranges | ||
3648 | format should not print bool with 'c' |
February 2022 | Complete | 15.0 | format |
3649 | [fund.ts.v2] Reinstate and bump __cpp_lib_experimental_memory_resource feature test macro |
February 2022 | |||
3650 | Are std::basic_string ‘s iterator and const_iterator constexpr iterators? |
February 2022 | Nothing To Do | ||
3654 | basic_format_context::arg(size_t) should be noexcept |
February 2022 | Complete | 15.0 | format |
3657 | std::hash<std::filesystem::path> is not enabled |
February 2022 | Complete | 17.0 | |
3660 | iterator_traits<common_iterator>::pointer should conform to §[iterator.traits] |
February 2022 | Complete | 14.0 | ranges |
3661 | constinit atomic<shared_ptr<T>> a(nullptr); should work |
February 2022 | |||
3564 | transform_view::iterator<true>::value_type and iterator_category should use const F& |
July 2022 | ranges | ||
3617 | function /packaged_task deduction guides and deducing this |
July 2022 | |||
3656 | Inconsistent bit operations returning a count | July 2022 | Complete | 15.0 | |
3659 | Consider ATOMIC_FLAG_INIT undeprecation |
July 2022 | Complete | 15.0 | |
3670 | Cpp17InputIterators don’t have integer-class difference types |
July 2022 | ranges | ||
3671 | atomic_fetch_xor missing from stdatomic.h |
July 2022 | |||
3672 | common_iterator::operator->() should return by value |
July 2022 | ranges | ||
3683 | operator== for polymorphic_allocator cannot deduce template argument in common cases |
July 2022 | |||
3687 | expected<cv void, E> move constructor should move |
July 2022 | Complete | 16.0 | |
3692 | zip_view::iterator ’s operator<=> is overconstrained |
July 2022 | ranges spaceship | ||
3701 | Make formatter<remove_cvref_t<const charT[N]>, charT> requirement explicit |
July 2022 | format | ||
3702 | Should zip_transform_view::iterator remove operator< |
July 2022 | ranges spaceship | ||
3703 | Missing requirements for expected<T, E> requires is_void<T> |
July 2022 | Complete | 16.0 | |
3704 | LWG 2059 added overloads that might be ill-formed for sets | July 2022 | |||
3705 | Hashability shouldn’t depend on basic_string’s allocator | July 2022 | Complete | 16.0 | |
3707 | chunk_view::outer-iterator::value_type::size should return unsigned type | July 2022 | ranges | ||
3708 | take_while_view::sentinel ’s conversion constructor should move |
July 2022 | Complete | 16.0 | ranges |
3709 | LWG-3703 was underly ambitious | July 2022 | |||
3710 | The end of chunk_view for input ranges can be const |
July 2022 | ranges | ||
3711 | Missing preconditions for slide_view constructor | July 2022 | ranges | ||
3712 | chunk_view and slide_view should not be default_initializable |
July 2022 | ranges | ||
3713 | Sorted with respect to comparator (only) | July 2022 | |||
3715 | view_interface::empty is overconstrained |
July 2022 | ranges | ||
3719 | Directory iterators should be usable with default sentinel | July 2022 | ranges | ||
3721 | Allow an arg-id with a value of zero for width in std-format-spec |
July 2022 | Complete | 16.0 | format |
3724 | decay-copy should be constrained |
July 2022 | Complete | 14.0 | |
3028 | Container requirements tables should distinguish const and non-const variables |
November 2022 | |||
3118 | fpos equality comparison unspecified |
November 2022 | |||
3177 | Limit permission to specialize variable templates to program-defined types | November 2022 | Nothing To Do | ||
3515 | §[stacktrace.basic.nonmem]: operator<< should be less templatized |
November 2022 | |||
3545 | std::pointer_traits should be SFINAE-friendly |
November 2022 | |||
3569 | join_view fails to support ranges of ranges with non-default_initializable iterators |
November 2022 | ranges | ||
3594 | inout_ptr — inconsistent release() in destructor |
November 2022 | |||
3597 | Unsigned integer types don’t model advanceable | November 2022 | ranges | ||
3600 | Making istream_iterator copy constructor trivial is an ABI break |
November 2022 | |||
3629 | make_error_code and make_error_condition are customization points |
November 2022 | Complete | 16.0 | |
3636 | formatter<T>::format should be const -qualified |
November 2022 | Complete | 16.0 | format |
3646 | std::ranges::view_interface::size returns a signed type |
November 2022 | Complete | 16.0 | ranges |
3677 | Is a cv-qualified pair specially handled in uses-allocator construction? |
November 2022 | |||
3717 | common_view::end should improve random_access_range case |
November 2022 | ranges | ||
3732 | prepend_range and append_range can’t be amortized constant time |
November 2022 | Nothing To Do | ranges | |
3736 | move_iterator missing disable_sized_sentinel_for specialization |
November 2022 | ranges | ||
3737 | take_view::sentinel should provide operator- |
November 2022 | ranges | ||
3738 | Missing preconditions for take_view constructor |
November 2022 | Complete | 16.0 | ranges |
3743 | ranges::to ’s reserve may be ill-formed |
November 2022 | ranges | ||
3745 | std::atomic_wait and its friends lack noexcept |
November 2022 | Complete | 16.0 | |
3746 | optional ’s spaceship with U with a type derived from optional causes infinite constraint meta-recursion |
November 2022 | Complete | 17.0 | spaceship |
3747 | ranges::uninitialized_copy_n , ranges::uninitialized_move_n , and ranges::destroy_n should use std::move |
November 2022 | ranges | ||
3750 | Too many papers bump __cpp_lib_format |
November 2022 | Partial [6] | format | |
3751 | Missing feature macro for flat_set |
November 2022 | flat containers | ||
3753 | Clarify entity vs. freestanding entity | November 2022 | |||
3754 | Class template expected synopsis contains declarations that do not match the detailed description | November 2022 | Nothing To Do | ||
3755 | tuple-for-each can call user-defined operator, |
November 2022 | Complete | 17.0 | |
3757 | What’s the effect of std::forward_like<void>(x) ? |
November 2022 | |||
3759 | ranges::rotate_copy should use std::move |
November 2022 | Complete | 15.0 | ranges |
3760 | cartesian_product_view::iterator ’s parent_ is never valid |
November 2022 | ranges | ||
3761 | cartesian_product_view::iterator::operator- should pass by reference |
November 2022 | ranges | ||
3762 | generator::iterator::operator== should pass by reference |
November 2022 | |||
3764 | reference_wrapper::operator() should propagate noexcept |
November 2022 | 17.0 | Complete | |
3765 | const_sentinel should be constrained |
November 2022 | ranges | ||
3766 | view_interface::cbegin is underconstrained |
November 2022 | ranges | ||
3770 | const_sentinel_t is missing |
November 2022 | ranges | ||
3773 | views::zip_transform still requires F to be copy_constructible when empty pack |
November 2022 | ranges | ||
3774 | <flat_set> should include <compare> |
November 2022 | flat containers | ||
3775 | Broken dependencies in the Cpp17Allocator requirements |
November 2022 | |||
3778 | vector<bool> missing exception specifications |
November 2022 | |||
3781 | The exposition-only alias templates cont-key-type and cont-mapped-type should be removed |
November 2022 | Nothing To Do | ||
3782 | Should <math.h> declare ::lerp ? |
November 2022 | Complete | 17.0 | |
3784 | std.compat should not provide ::byte and its friends |
November 2022 | |||
3785 | ranges::to is over-constrained on the destination type being a range |
November 2022 | ranges | ||
3788 | jthread::operator=(jthread&&) postconditions are unimplementable under self-assignment |
November 2022 | |||
3792 | __cpp_lib_constexpr_algorithms should also be defined in <utility> |
November 2022 | Complete | 16.0 | |
3795 | Self-move-assignment of std::future and std::shared_future have unimplementable postconditions |
November 2022 | |||
3796 | movable-box as member should use default-initialization instead of copy-initialization |
November 2022 | ranges | ||
3798 | Rvalue reference and iterator_category |
November 2022 | Partial [7] | ranges | |
3801 | cartesian_product_view::iterator::distance-from ignores the size of last underlying range |
November 2022 | ranges | ||
3814 | Add freestanding items requested by NB comments | November 2022 | |||
3816 | flat_map and flat_multimap should impose sequence container requirements |
November 2022 | flat containers | ||
3817 | Missing preconditions on forward_list modifiers |
November 2022 | |||
3818 | Exposition-only concepts are not described in library intro | November 2022 | Nothing To Do | ||
3822 | Avoiding normalization in filesystem::weakly_canonical |
November 2022 | |||
3823 | Unnecessary precondition for is_aggregate |
November 2022 | |||
3824 | Number of bind placeholders is underspecified |
November 2022 | Nothing To Do | ||
3826 | Redundant specification [for overload of yield_value] | November 2022 | |||
2195 | Missing constructors for match_results |
February 2023 | |||
2295 | Locale name when the provided Facet is a nullptr |
February 2023 | |||
3032 | ValueSwappable requirement missing for push_heap and make_heap |
February 2023 | |||
3085 | char_traits::copy precondition too weak |
February 2023 | |||
3664 | LWG 3392 broke std::ranges::distance(a, a+3) |
February 2023 | ranges | ||
3720 | Restrict the valid types of arg-id for width and precision in std-format-spec |
February 2023 | Complete | 17.0 | format |
3756 | Is the std::atomic_flag class signal-safe? |
February 2023 | |||
3769 | basic_const_iterator::operator== causes infinite constraint recursion |
February 2023 | spaceship | ||
3807 | The feature test macro for ranges::find_last should be renamed |
February 2023 | ranges | ||
3811 | views::as_const on ref_view<T> should return ref_view<const T> |
February 2023 | ranges | ||
3820 | cartesian_product_view::iterator::prev is not quite right |
February 2023 | ranges | ||
3825 | Missing compile-time argument id check in basic_format_parse_context::next_arg_id |
February 2023 | Complete | 17.0 | format |
3204 | sub_match::swap only swaps the base class |
February 2023 | Complete | 17.0 | |
3733 | ranges::to misuses cpp17-input-iterator |
February 2023 | ranges | ||
3742 | deque::prepend_range needs to permute |
February 2023 | ranges | ||
3790 | P1467 accidentally changed nexttoward ’s signature |
February 2023 | |||
3819 | reference_meows_from_temporary should not use is_meowible |
February 2023 | |||
3821 | uses_allocator_construction_args should have overload for pair-like |
February 2023 | |||
3834 | Missing constexpr for std::intmax_t math functions in <cinttypes> |
February 2023 | |||
3839 | range_formatter ’s set_separator , set_brackets , and underlying functions should be noexcept |
February 2023 | Complete | 17.0 | format |
3841 | <version> should not be “all freestanding” |
February 2023 | |||
3842 | Unclear wording for precision in chrono-format-spec |
February 2023 | Complete | 16.0 | format |
3848 | adjacent_view , adjacent_transform_view and slide_view missing base accessor |
February 2023 | ranges | ||
3849 | cartesian_product_view::iterator ’s default constructor is overconstrained |
February 2023 | ranges | ||
3850 | views::as_const on empty_view<T> should return empty_view<const T> |
February 2023 | ranges | ||
3851 | chunk_view::inner-iterator missing custom iter_move and iter_swap |
February 2023 | ranges | ||
3853 | basic_const_iterator<volatile int*>::operator-> is ill-formed |
February 2023 | |||
3857 | basic_string_view should allow explicit conversion when only traits vary |
February 2023 | Complete | 17.0 | |
3860 | range_common_reference_t is missing |
February 2023 | Complete | 17.0 | ranges |
3866 | Bad Mandates for expected::transform_error overloads |
February 2023 | Complete | 17.0 | |
3867 | Should std::basic_osyncstream ’s move assignment operator be noexcept ? |
February 2023 | |||
3441 | Misleading note about calls to customization points | February 2023 | |||
3622 | Misspecified transitivity of equivalence in §[unord.req.general] | February 2023 | |||
3631 | basic_format_arg(T&&) should use remove_cvref_t<T> throughout |
February 2023 | Complete | 15.0 | |
3645 | resize_and_overwrite is overspecified to call its callback with lvalues |
February 2023 | Complete | 14.0 | |
3655 | The INVOKE operation and union types |
February 2023 | |||
3723 | priority_queue::push_range needs to append_range |
February 2023 | ranges | ||
3734 | Inconsistency in inout_ptr and out_ptr for empty case |
February 2023 | |||
3772 | repeat_view ’s piecewise constructor is missing Postconditions |
February 2023 | ranges | ||
3786 | Flat maps’ deduction guide needs to default Allocator to be useful |
February 2023 | |||
3803 | flat_foo constructors taking KeyContainer lack KeyCompare parameter |
February 2023 | |||
3810 | CTAD for std::basic_format_args |
February 2023 | Complete | 17.0 | format |
3827 | Deprecate <stdalign.h> and <stdbool.h> macros |
February 2023 | |||
3828 | Sync intmax_t and uintmax_t with C2x |
February 2023 | |||
3833 | Remove specialization template<size_t N> struct formatter<const charT[N], charT> |
February 2023 | Complete | 17.0 | format |
3836 | std::expected<bool, E1> conversion constructor expected(const expected<U, G>&) should take precedence over expected(U&&) with operator bool |
February 2023 | |||
3843 | std::expected<T,E>::value() & assumes E is copy constructible |
February 2023 | |||
3847 | ranges::to can still return views |
February 2023 | ranges | ||
3862 | basic_const_iterator ’s common_type specialization is underconstrained |
February 2023 | |||
3865 | Sorting a range of pairs |
February 2023 | Complete | 17.0 | ranges |
3869 | Deprecate std::errc constants related to UNIX STREAMS |
February 2023 | |||
3870 | Remove voidify |
February 2023 | |||
3871 | Adjust note about terminate |
February 2023 | |||
3872 | basic_const_iterator should have custom iter_move |
February 2023 | |||
3875 | std::ranges::repeat_view<T, IntegerClass>::iterator may be ill-formed |
February 2023 | ranges | ||
3876 | Default constructor of std::layout_XX::mapping misses precondition |
February 2023 | |||
3877 | Incorrect constraints on const -qualified monadic overloads for std::expected |
February 2023 | Complete | 17.0 | |
3878 | import std; should guarantee initialization of standard iostreams objects |
February 2023 | |||
3879 | erase_if for flat_{,multi}set is incorrectly specified |
February 2023 | |||
3880 | Clarify operator+= complexity for {chunk,stride}_view::iterator |
February 2023 | ranges | ||
3881 | Incorrect formatting of container adapters backed by std::string |
February 2023 | Complete | 17.0 | format |
3343 | Ordering of calls to unlock() and notify_all() in Effects element of notify_all_at_thread_exit() should be reversed |
Not Yet Adopted | Complete | 16.0 | |
3892 | Incorrect formatting of nested ranges and tuples | Not Yet Adopted | Complete | 17.0 |