# C++ Standard Library Issues List (Revision R125)

# Index by Section

Reference ISO/IEC IS 14882:2024(E)

This document is the Index by Section for the Library Active Issues List, Library Defect Reports and Accepted Issues, and Library Closed Issues List.

## Index by Section

(view only non-Ready open issues)

Revised 2025-10-30 at 17:40:13 UTC

## Section 2 (2 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
571(i) | NAD Editorial | 2 [intro.refs] | Update C90 references to C99? | Yes |  |
653(i) | NAD | 2 [intro.refs] | Library reserved names | Yes |  |

## Section 3 (6 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2872(i) | C++17 | 3 [intro.defs] | Add definition for direct-non-list-initialization | Yes |  |
1354(i) | C++11 | 3.16 [defns.deadlock] | The definition of deadlock excludes cases involving a single thread | Yes |  |
2392(i) | WP | 3.36 [defns.ntcts] | "character type" is used but not defined | Yes | 3 |
3119(i) | C++20 | 3.42 [defns.prog.def.spec] | Program-definedness of closure types | Yes | 2 |
3513(i) | New | 3.43 [defns.prog.def.type] | Fix definition of program-defined based on its uses | Yes | 3 |
4005(i) | New | 3.48 [defns.required.behavior] | "Required behavior" too narrowly defined | No | 2 |

## Section 4 (1 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
3669(i) | New | 4.1.2 [intro.abstract] | `std::filesystem` operations should be observable behaviour | No | 3 |

## Section 6 (4 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
873(i) | NAD Editorial | 6.9.2 [basic.fundamental] | signed integral type and unsigned integral type are not clearly defined | Yes |  |
2506(i) | SG1 | 6.10.2 [intro.multithread] | Underspecification of atomics | No | 3 |
2075(i) | Resolved | 6.10.2 [intro.multithread] | Progress guarantees, lock-free property, and scheduling assumptions | Yes |  |
462(i) | NAD | 6.10.3.4 [basic.start.term] | Destroying objects with static storage duration | Yes |  |

## Section 16 (231 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
3105(i) | New | 16 [library] | `T1` is convertible to `T2` | No | 3 |
2949(i) | New | 16 [library] | Unclear complexity requirements: space vs. time | No | 4 |
1195(i) | C++11 | 16 [library] | "Diagnostic required" wording is insufficient to prevent UB | Yes |  |
1349(i) | C++11 | 16 [library] | `swap` should not throw | Yes |  |
182(i) | CD1 | 16 [library] | Ambiguous references to size_t | Yes |  |
230(i) | CD1 | 16 [library] | Assignable specified without also specifying CopyConstructible | Yes |  |
336(i) | CD1 | 16 [library] | Clause 17 lack of references to deprecated headers | Yes |  |
2925(i) | Resolved | 16 [library] | Template argument deduction is not used in the standard library | Yes |  |
343(i) | Resolved | 16 [library] | Unspecified library header dependencies | Yes |  |
625(i) | Resolved | 16 [library] | Mixed up Effects and Returns clauses | Yes |  | 895
1151(i) | Resolved | 16 [library] | Behavior of the library in the presence of threads is incompletely specified | Yes |  |
1344(i) | Resolved | 16 [library] | Replace `throw()` with `noexcept` | Yes |  | 1351
1345(i) | Resolved | 16 [library] | Library classes should have `noexcept` move operations | Yes |  |
1346(i) | Resolved | 16 [library] | Apply `noexcept` where library specification does not permit exceptions | Yes |  | 1352
1347(i) | Resolved | 16 [library] | Apply `noexcept` judiciously throughout the library | Yes |  |
1353(i) | Resolved | 16 [library] | Clarify the state of a moved-from object | Yes |  |
972(i) | NAD Editorial | 16 [library] | The term "Assignable" undefined but still in use | Yes |  |
1232(i) | NAD Editorial | 16 [library] | Still `swap`'s with rvalue-references | Yes |  |
877(i) | NAD | 16 [library] | to `throw()` or to Throw: Nothing. | Yes |  |
2898(i) | NAD | 16 [library] | Prefer not to use member typedefs as constructor parameters | Yes |  |
2865(i) | NAD | 16 [library] | Resolve all open Library issues for C++17 | Yes |  |
1173(i) | NAD | 16 [library] | "Equivalence" wishy-washiness | Yes | 3 |
385(i) | NAD | 16 [library] | Does call by value imply the CopyConstructible requirement? | Yes |  |
941(i) | NAD | 16 [library] | Ref-qualifiers for assignment operators | Yes |  |
996(i) | NAD | 16 [library] | Move operation not well specified | Yes |  |
1099(i) | NAD | 16 [library] | Various issues | Yes |  |
1153(i) | NAD | 16 [library] | Standard library needs review for constructors to be explicit to avoid treatment as initializer-list constructor | Yes |  |
1236(i) | NAD | 16 [library] | reserved identifiers in programs not using the library | Yes |  |
1331(i) | NAD | 16 [library] | incorporate move special member functions into library | Yes |  |
1348(i) | NAD | 16 [library] | Exception safety of unspecified types | Yes |  |
1350(i) | Dup | 16 [library] | Implicit contructors accidentally made some library types move-only | Yes |  | 1421
1351(i) | Dup | 16 [library] | Replace dynamic exception specifications with `noexcept` | Yes |  | 1344
1352(i) | Dup | 16 [library] | Apply `noexcept` where library specification says "Throws: Nothing" | Yes |  | 1346
989(i) | NAD Concepts | 16 [library] | late_check and library | Yes |  |
1001(i) | NAD Concepts | 16 [library] | Pointers, concepts and headers | Yes |  |
1096(i) | NAD Concepts | 16 [library] | unconstrained rvalue ref parameters | Yes |  |
3538(i) | New | 16.2 [library.c] | §[library.c] C library functions are not addressable | No | 2 |
2136(i) | Open | 16.3.2 [structure] | Postconditions vs. exceptions | Yes | 3 |
424(i) | NAD Editorial | 16.3.2.2 [structure.summary] | normative notes | Yes |  |
3556(i) | New | 16.3.2.3 [structure.requirements] | Specification of when semantic constraints are imposed by use of concepts is unclear | No | 3 |
995(i) | NAD | 16.3.2.3 [structure.requirements] | Operational Semantics Unclear | Yes |  |
3193(i) | New | 16.3.2.4 [structure.specifications] | Mandates: and Expects: elements are not defined for types | Yes | 3 |
3401(i) | New | 16.3.2.4 [structure.specifications] | Is "as if by" equivalent to "equivalent to"? | No | 3 |
2679(i) | C++17 | 16.3.2.4 [structure.specifications] | Inconsistent Use of Effects and Equivalent To | Yes | 3 |
2710(i) | C++17 | 16.3.2.4 [structure.specifications] | "Effects: Equivalent to ..." doesn't count "Synchronization:" as determined semantics | Yes | 0 |
997(i) | C++11 | 16.3.2.4 [structure.specifications] | "Effects: Equivalent to" is underspecified | Yes |  |
222(i) | TC1 | 16.3.2.4 [structure.specifications] | Are throw clauses necessary if a throw is already implied by the effects clause? | Yes |  |
3168(i) | Resolved | 16.3.2.4 [structure.specifications] | Expects: element should be specified in one place | Yes | 2 |
2292(i) | Resolved | 16.3.2.4 [structure.specifications] | Find a better phrasing for "shall not participate in overload resolution" | Yes | 3 |
626(i) | NAD Editorial | 16.3.2.4 [structure.specifications] | new Remark clauses not documented | Yes |  |
1179(i) | NAD Editorial | 16.3.2.4 [structure.specifications] | Probably editorial in [structure.specifications] | Yes |  |
492(i) | NAD | 16.3.2.4 [structure.specifications] | Invalid iterator arithmetic expressions | Yes |  |
663(i) | NAD | 16.3.2.4 [structure.specifications] | Complexity Requirements | Yes |  |
895(i) | Dup | 16.3.2.4 [structure.specifications] | "Requires:" on std::string::at et al | Yes |  | 625
3818(i) | C++23 | 16.3.3 [conventions] | Exposition-only concepts are not described in library intro | Yes |  |
3724(i) | C++23 | 16.3.3.2 [expos.only.entity] | `decay-copy` should be constrained | Yes | 3 |
2999(i) | Resolved | 16.3.3.2 [expos.only.entity] | §[thread.decaycopy] issue | Yes | 3 |
1156(i) | NAD | 16.3.3.3.2 [enumerated.types] | Constraints on bitmask and enumeration types to be tightened | Yes |  |
3977(i) | New | 16.3.3.3.3 [bitmask.types] | `constexpr` and `noexcept` for operators for bitmask types | Yes | 3 |
3092(i) | Open | 16.3.3.3.3 [bitmask.types] | Unclear semantics of `enum class` bitmask types | Yes | 3 |
262(i) | CD1 | 16.3.3.3.3 [bitmask.types] | Bitmask operator ~ specified incorrectly | Yes |  |
1357(i) | Resolved | 16.3.3.3.3 [bitmask.types] | Library bitmask types to not satisfy the bimask type requirements | Yes |  |
2692(i) | NAD | 16.3.3.3.3 [bitmask.types] | Overspecification of lvalueness of bitmask elements | Yes | 3 |
3620(i) | New | 16.3.3.3.4.1 [character.seq.general] | What are execution character sets and execution wide-character sets (after P2314R4)? | No | 3 |
1060(i) | NAD Editorial | 16.3.3.3.4.2 [byte.strings] | Embedded nulls in NTBS | Yes |  |
3285(i) | C++20 | 16.3.3.3.5 [customization.point.object] | The type of a customization point object shall satisfy `semiregular` | Yes | 0 |
3510(i) | Resolved | 16.3.3.3.5 [customization.point.object] | Customization point objects should be invocable as non-`const` too | Yes | 3 |
3753(i) | C++23 | 16.3.3.7 [freestanding.item] | Clarify entity vs. freestanding entity | Yes | 2 |
3815(i) | Resolved | 16.3.3.7 [freestanding.item] | Freestanding enumerators specification is lacking | Yes |  |
4049(i) | New | 16.4.2 [organization] | C `<foo.h>` headers not in freestanding | Yes | 3 |
3690(i) | New | 16.4.2.2 [contents] | `std::make_from_tuple` etc. should find all tuple-like `std::get` overloads | Yes | 3 |
2818(i) | C++23 | 16.4.2.2 [contents] | `"::std::"` everywhere rule needs tweaking | Yes | 2 |
1065(i) | C++11 | 16.4.2.2 [contents] | Allow inline namespaces within namespace `std` for implementations | Yes |  |
229(i) | CD1 | 16.4.2.2 [contents] | Unqualified references of other library entities | Yes |  |
992(i) | NAD | 16.4.2.2 [contents] | Allow implementations to implement C library in the global namespace | Yes |  |
2380(i) | C++17 | 16.4.2.3 [headers] | May `<cstdlib>` provide `long ::abs(long)` and `long long ::abs(long long)`? | Yes | 2 |
310(i) | CD1 | 16.4.2.3 [headers] | Is errno a macro? | Yes |  |
456(i) | CD1 | 16.4.2.3 [headers] | Traditional C header files are overspecified | Yes |  |
465(i) | CD1 | 16.4.2.3 [headers] | Contents of <ciso646> | Yes |  |
1002(i) | NAD | 16.4.2.3 [headers] | Provide bulk include headers | Yes |  |
3784(i) | C++23 | 16.4.2.4 [std.modules] | `std.compat` should not provide `::byte` and its friends | Yes |  |
3871(i) | C++23 | 16.4.2.5 [compliance] | Adjust note about `terminate` | Yes |  |
3148(i) | C++20 | 16.4.2.5 [compliance] | `<concepts>` should be freestanding | Yes | 0 |
1264(i) | C++11 | 16.4.2.5 [compliance] | `quick_exit` support for freestanding implementations | Yes |  |
1360(i) | C++11 | 16.4.2.5 [compliance] | Add `<atomic>` to free-standing implementations | Yes |  |
833(i) | NAD | 16.4.2.5 [compliance] | Freestanding implementations header list needs review for C++0x | Yes |  |
1003(i) | NAD | 16.4.2.5 [compliance] | Require more useful headers for freestanding implementations | Yes |  |
1358(i) | NAD | 16.4.2.5 [compliance] | Add `<chrono>` and `<ratio>` to freestanding implementations | Yes |  |
1359(i) | NAD | 16.4.2.5 [compliance] | Add `<tuple>` and `<utility>` to freestanding implementations | Yes |  |
1361(i) | NAD | 16.4.3 [using] | Does use of `std::size_t` in a header imply that typedef name is available to users? | Yes |  |
3240(i) | New | 16.4.3.2 [using.headers] | Headers declare more than entities | No | 3 |
2428(i) | C++17 | 16.4.3.2 [using.headers] | "External declaration" used without being defined | Yes | 0 |
2225(i) | C++14 | 16.4.3.2 [using.headers] | Unrealistic header inclusion checks required | Yes |  |
657(i) | NAD | 16.4.3.2 [using.headers] | unclear requirement about header inclusion | Yes |  |
1(i) | TC1 | 16.4.3.3 [using.linkage] | C library linkage editing oversight | Yes |  |
2281(i) | NAD Editorial | 16.4.3.3 [using.linkage] | C99 cross-reference typo in [using.linkage] | Yes |  |
3640(i) | New | 16.4.4 [utility.requirements] | Clarify which exceptions are propagated | Yes | 3 |
4075(i) | SG1 | 16.4.4 [utility.requirements] | Thread stability requirement on constructors and destructors | No | 3 |
4317(i) | Tentatively Ready | 16.4.4.2 [utility.arg.requirements] | The meaning of "resource" in the Cpp17Destructible requirements is undefined | Yes |  |
2146(i) | Open | 16.4.4.2 [utility.arg.requirements] | Are reference types `CopyConstructible`/`MoveConstructible`/`CopyAssignable`/`MoveAssignable`/`Destructible`? | No | 3 |
2170(i) | C++17 | 16.4.4.2 [utility.arg.requirements] | Aggregates cannot be `DefaultConstructible` | Yes | 2 |
724(i) | C++11 | 16.4.4.2 [utility.arg.requirements] | `DefaultConstructible` is not defined | Yes |  |
753(i) | C++11 | 16.4.4.2 [utility.arg.requirements] | Move constructor in draft | Yes |  |
1309(i) | C++11 | 16.4.4.2 [utility.arg.requirements] | Missing expressions for `Move/CopyConstructible` | Yes |  |
672(i) | CD1 | 16.4.4.2 [utility.arg.requirements] | Swappable requirements need updating | Yes |  |
594(i) | Resolved | 16.4.4.2 [utility.arg.requirements] | Disadvantages of defining `Swappable` in terms of `CopyConstructible` and `Assignable` | Yes |  |
742(i) | Resolved | 16.4.4.2 [utility.arg.requirements] | Enabling `swap` for proxy iterators | Yes |  |
1283(i) | Resolved | 16.4.4.2 [utility.arg.requirements] | `MoveConstructible` and `MoveAssignable` need clarification of moved-from state | Yes |  |
1322(i) | Resolved | 16.4.4.2 [utility.arg.requirements] | Explicit `CopyConstructible` requirements are insufficient | Yes |  |
390(i) | NAD Editorial | 16.4.4.2 [utility.arg.requirements] | CopyConstructible requirements too strict | Yes |  |
822(i) | NAD | 16.4.4.2 [utility.arg.requirements] | Object with explicit copy constructor no longer `CopyConstructible` | Yes |  |
1374(i) | NAD | 16.4.4.2 [utility.arg.requirements] | Clarify moved-from objects are "toxic" | Yes |  |
910(i) | NAD Concepts | 16.4.4.2 [utility.arg.requirements] | Effects of MoveAssignable | Yes |  |
2152(i) | LEWG | 16.4.4.3 [swappable.requirements] | Instances of standard container types are not swappable | Yes | 3 |
2171(i) | NAD | 16.4.4.3 [swappable.requirements] | "swappable" undefined for swapping lvalue and rvalue | Yes |  |
4155(i) | New | 16.4.4.4 [nullablepointer.requirements] | Cpp17NullablePointer should require that some expression can be contextually converted to bool | Yes | 3 |
2114(i) | Resolved | 16.4.4.4 [nullablepointer.requirements] | Incorrect "contextually convertible to `bool`" requirements | Yes | 3 |
4296(i) | New | 16.4.4.5 [hash.requirements] | Clarify that Cpp17Hash does not imply stateless | No | 3 |
2291(i) | C++14 | 16.4.4.5 [hash.requirements] | `std::hash` is vulnerable to collision DoS attack | Yes |  |
1332(i) | C++11 | 16.4.4.5 [hash.requirements] | Let Hash objects throw! | Yes |  |
3044(i) | New | 16.4.4.6 [allocator.requirements] | Strange specification of `max_size()` for an allocator | Yes | 3 |
3267(i) | New | 16.4.4.6 [allocator.requirements] | Rebound allocators and `is_always_equal` | Yes | 4 |
3157(i) | New | 16.4.4.6 [allocator.requirements] | Allocator `destroy` and fancy pointer operations must be non-throwing | Yes | 3 |
2461(i) | New | 16.4.4.6 [allocator.requirements] | Interaction between allocators and container exception safety guarantees | No | 3 |
2178(i) | Pending NAD Editorial | 16.4.4.6 [allocator.requirements] | `Allocator` requirement changes not mentioned Annex C | Yes | 3 |
2593(i) | C++20 | 16.4.4.6 [allocator.requirements] | Moved-from state of Allocators | Yes | 4 |
3315(i) | C++20 | 16.4.4.6 [allocator.requirements] | Correct Allocator Default Behavior | Yes | 0 |
2016(i) | C++17 | 16.4.4.6 [allocator.requirements] | `Allocators` must be no-throw swappable | Yes | 2 |
2260(i) | C++17 | 16.4.4.6 [allocator.requirements] | Missing requirement for `Allocator::pointer` | Yes | 3 |
2384(i) | C++17 | 16.4.4.6 [allocator.requirements] | Allocator's `deallocate` function needs better specification | Yes | 3 |
2447(i) | C++17 | 16.4.4.6 [allocator.requirements] | Allocators and `volatile`-qualified value types | Yes | 4 |
2455(i) | C++17 | 16.4.4.6 [allocator.requirements] | Allocator default construction should be allowed to throw | Yes |  |
2466(i) | C++17 | 16.4.4.6 [allocator.requirements] | `allocator_traits::max_size()` default behavior is incorrect | Yes | 3 |
2467(i) | C++17 | 16.4.4.6 [allocator.requirements] | `is_always_equal` has slightly inconsistent default | Yes | 0 |
2470(i) | C++17 | 16.4.4.6 [allocator.requirements] | Allocator's `destroy` function should be allowed to fail to instantiate | Yes |  |
2065(i) | C++14 | 16.4.4.6 [allocator.requirements] | Minimal allocator interface | Yes |  |
2081(i) | C++14 | 16.4.4.6 [allocator.requirements] | `Allocator` requirements should include `CopyConstructible` | Yes |  |
2147(i) | C++14 | 16.4.4.6 [allocator.requirements] | Unclear hint type in `Allocator`'s `allocate` function | Yes |  |
2162(i) | C++14 | 16.4.4.6 [allocator.requirements] | `allocator_traits::max_size` missing `noexcept` | Yes |  |
2263(i) | C++14 | 16.4.4.6 [allocator.requirements] | Comparing iterators and allocator pointers with different const-character | Yes | 1 |
752(i) | C++11 | 16.4.4.6 [allocator.requirements] | Allocator complexity requirement | Yes |  |
258(i) | CD1 | 16.4.4.6 [allocator.requirements] | Missing allocator requirement | Yes |  |
274(i) | CD1 | 16.4.4.6 [allocator.requirements] | a missing/impossible allocator requirement | Yes |  |
401(i) | CD1 | 16.4.4.6 [allocator.requirements] | incorrect type casts in table 32 in lib.allocator.requirements | Yes |  |
402(i) | CD1 | 16.4.4.6 [allocator.requirements] | wrong new expression in [some_]allocator::construct | Yes |  |
199(i) | TC1 | 16.4.4.6 [allocator.requirements] | What does `allocate(0)` return? | Yes |  |
2108(i) | Resolved | 16.4.4.6 [allocator.requirements] | No way to identify allocator types that always compare equal | Yes | 3 |
431(i) | Resolved | 16.4.4.6 [allocator.requirements] | Swapping containers with unequal allocators | Yes |  |
635(i) | Resolved | 16.4.4.6 [allocator.requirements] | domain of `allocator::address` | Yes |  |
12(i) | NAD | 16.4.4.6 [allocator.requirements] | Way objects hold allocators unclear | Yes |  |
197(i) | NAD | 16.4.4.6 [allocator.requirements] | max_size() underspecified | Yes |  |
277(i) | NAD | 16.4.4.6 [allocator.requirements] | Normative encouragement in allocator requirements unclear | Yes |  |
487(i) | NAD | 16.4.4.6 [allocator.requirements] | Allocator::construct is too limiting | Yes |  |
560(i) | NAD | 16.4.4.6 [allocator.requirements] | User-defined allocators without default constructor | Yes |  |
1376(i) | NAD | 16.4.4.6 [allocator.requirements] | Allocator interface is not backward compatible | Yes |  |
2311(i) | NAD | 16.4.4.6 [allocator.requirements] | Allocator requirements should be further minimized | Yes | 2 |
1375(i) | Dup | 16.4.4.6 [allocator.requirements] | `reference_type` should not have been removed from the allocator requirements | Yes |  | 1318
4258(i) | New | 16.4.4.6.1 [allocator.requirements.general] | Size type mismatch in constraints involving Cpp17Allocator | No | 4 |
4128(i) | New | 16.4.4.6.1 [allocator.requirements.general] | Allocator requirements should not allow rebinding conversions to be explicit | Yes | 3 |
4065(i) | New | 16.4.4.6.1 [allocator.requirements.general] | Requirements for fancy pointers might be insufficient for self-referential implementation of containers | Yes | 3 |
3682(i) | New | 16.4.4.6.1 [allocator.requirements.general] | A Cpp17Allocator type can't silently ignore an unsupported alignment | No | 3 |
3775(i) | C++23 | 16.4.4.6.1 [allocator.requirements.general] | Broken dependencies in the Cpp17Allocator requirements | Yes |  |
2954(i) | C++20 | 16.4.5 [constraints] | Specialization of the convenience variable templates should be prohibited | Yes |  |
4047(i) | New | 16.4.5.2.1 [namespace.std] | Explicitly specifying template arguments for `std::swap` should not be supported | No | 4 |
3926(i) | New | 16.4.5.2.1 [namespace.std] | Which namespace `std` is the mentioned one? | Yes | 4 |
3177(i) | C++23 | 16.4.5.2.1 [namespace.std] | Limit permission to specialize variable templates to program-defined types | Yes | 3 |
3441(i) | C++23 | 16.4.5.2.1 [namespace.std] | Misleading note about calls to customization points | Yes | 1 |
2139(i) | C++20 | 16.4.5.2.1 [namespace.std] | What is a user-defined type? | Yes | 4 |
2129(i) | C++17 | 16.4.5.2.1 [namespace.std] | User specializations of `std::initializer_list` | Yes | 3 |
1157(i) | C++11 | 16.4.5.2.1 [namespace.std] | Local types can now instantiate templates | Yes |  |
3442(i) | Resolved | 16.4.5.2.1 [namespace.std] | Unsatisfiable suggested implementation of customization points | Yes | 1 |
3928(i) | New | 16.4.5.2.2 [namespace.posix] | Non-top-level namespace `posix` shouldn't be reserved | Yes | 3 |
3550(i) | New | 16.4.5.3 [reserved.names] | Names reserved by C for standard library not reserved by C++ | No | 3 |
120(i) | CD1 | 16.4.5.3 [reserved.names] | Can an implementor add specializations? | Yes |  |
226(i) | CD1 | 16.4.5.3 [reserved.names] | User supplied specializations or overloads of namespace std function templates | Yes |  |
232(i) | CD1 | 16.4.5.3 [reserved.names] | "depends" poorly defined in 17.4.3.1 | Yes |  |
422(i) | CD1 | 16.4.5.3 [reserved.names] | explicit specializations of member functions of class templates | Yes |  |
3885(i) | WP | 16.4.5.3.2 [zombie.names] | '`op`' should be in [zombie.names] | Yes |  |
4033(i) | New | 16.4.5.3.3 [macro.names] | §[macro.names] defining macros after importing the standard library | Yes | 3 |
3132(i) | C++20 | 16.4.5.3.3 [macro.names] | Library needs to ban macros named `expects` or `ensures` | Yes | 0 |
3147(i) | C++20 | 16.4.5.3.3 [macro.names] | Definitions of "likely" and "unlikely" are likely to cause problems | Yes | 0 |
2014(i) | C++11 | 16.4.5.3.3 [macro.names] | More restrictions on macro names | Yes |  |
294(i) | CD1 | 16.4.5.3.3 [macro.names] | User defined macros and standard headers | Yes |  |
4149(i) | Resolved | 16.4.5.3.3 [macro.names] | User defined macros without standard headers (294 redux) | Yes |  |
3920(i) | New | 16.4.5.3.4 [extern.names] | Bad footnotes claiming external linkage for entities defined as macros | No | 3 |
2340(i) | C++17 | 16.4.5.6 [replacement.functions] | Replacement allocation functions declared as inline | Yes | 2 |
404(i) | CD1 | 16.4.5.6 [replacement.functions] | May a replacement allocation function be declared inline? | Yes |  |
3142(i) | New | 16.4.5.8 [res.on.functions] | `std::foo<incomplete>` should be ill-formed NDR | Yes | 3 |
1004(i) | C++11 | 16.4.5.8 [res.on.functions] | Clarify "throws an exception" | Yes |  |
611(i) | CD1 | 16.4.5.8 [res.on.functions] | Standard library templates and incomplete types | Yes |  |
3511(i) | New | 16.4.5.9 [res.on.arguments] | Clarify global permission to move | Yes | 3 |
2468(i) | C++17 | 16.4.5.9 [res.on.arguments] | Self-move-assignment of library types | Yes | 2 |
1362(i) | C++11 | 16.4.5.9 [res.on.arguments] | Description of binding to rvalue-references should use the new 'xvalue' vocabulary | Yes |  |
1204(i) | C++11 | 16.4.5.9 [res.on.arguments] | Global permission to move | Yes |  |
2224(i) | C++17 | 16.4.5.10 [res.on.objects] | Ambiguous status of access to non-live objects | Yes | 2 |
1095(i) | C++11 | 16.4.5.10 [res.on.objects] | Shared objects and the library wording unclear | Yes |  |
4068(i) | New | 16.4.5.11 [res.on.requirements] | Terminology for objects whose types model a concept | No | 3 |
3429(i) | New | 16.4.5.11 [res.on.requirements] | "models" should subsume like "satisfies" | Yes | 3 |
2112(i) | C++14 | 16.4.6 [conforming] | User-defined classes that cannot be derived from | Yes | 1 |
2891(i) | NAD | 16.4.6 [conforming] | Relax library requirements on `volatile` types | Yes |  |
94(i) | NAD | 16.4.6 [conforming] | May library implementors add template parameters to Standard Library classes? | Yes |  |
2113(i) | NAD | 16.4.6 [conforming] | Do library implementers have the freedom to add `final` to non-polymorphic components? | Yes |  |
2373(i) | NAD | 16.4.6 [conforming] | Make new entities and names in namespace `std` conforming extensions | Yes | 3 |
1178(i) | C++11 | 16.4.6.2 [res.on.headers] | Header dependencies | Yes |  |
4100(i) | New | 16.4.6.4 [global.functions] | Default arguments and signatures of standard library non-member functions | Yes | 3 |
2133(i) | C++17 | 16.4.6.4 [global.functions] | Attitude to overloaded comma for iterators | Yes | 3 |
2795(i) | C++17 | 16.4.6.4 [global.functions] | §[global.functions] provides incorrect example of ADL use | Yes |  |
225(i) | CD1 | 16.4.6.4 [global.functions] | std:: algorithms use of other unqualified algorithms | Yes |  |
147(i) | TC1 | 16.4.6.4 [global.functions] | Library Intro refers to global functions that aren't global | Yes |  |
2930(i) | NAD | 16.4.6.4 [global.functions] | Are implementations allowed to split non-member functions into several overloads? | Yes |  |
4306(i) | New | 16.4.6.5 [member.functions] | Interaction between LWG 2259 and Constraints of member functions | No | 3 |
2695(i) | New | 16.4.6.5 [member.functions] | "As if" unclear in [member.functions] | No | 3 |
2259(i) | C++17 | 16.4.6.5 [member.functions] | Issues in 17.6.5.5 rules for member functions | Yes | 3 |
2563(i) | NAD | 16.4.6.5 [member.functions] | LWG 2259 relaxes requirements, perhaps unintentionally | Yes | 2 |
95(i) | NAD | 16.4.6.5 [member.functions] | Members added by the implementation | Yes |  |
2013(i) | C++14 | 16.4.6.7 [constexpr.functions] | Do library implementers have the freedom to add `constexpr`? | Yes |  |
2892(i) | NAD | 16.4.6.7 [constexpr.functions] | Relax the prohibition on libraries adding `constexpr` | Yes | 1 |
2044(i) | C++14 | 16.4.6.8 [algorithm.stable] | No definition of "Stable" for copy algorithms | Yes |  |
2414(i) | Open | 16.4.6.9 [reentrancy] | Member function reentrancy should be implementation-defined | Yes | 3 |
2382(i) | Pending NAD | 16.4.6.9 [reentrancy] | Unclear order of container update versus object destruction on removing an object | Yes | 2 |
4129(i) | New | 16.4.6.10 [res.on.data.races] | Possibly incorrect wording for data race avoidance | Yes | 3 |
4145(i) | New | 16.4.6.10 [res.on.data.races] | Unclear how [res.on.data.races] apply to templated functions | No | 3 |
1526(i) | Resolved | 16.4.6.10 [res.on.data.races] | C++ should not impose thread safety requirements on C99 library implementations | Yes | 3 |
4252(i) | New | 16.4.6.13 [derivation] | Are exposition-only classes considered specified for the purpose of `final`? | Yes | 3 |
2866(i) | C++17 | 16.4.6.13 [derivation] | Incorrect derived classes constraints | Yes |  |
3854(i) | New | 16.4.6.14 [res.on.exception.handling] | §[res.on.exception.handling]/3 should not be applied to all standard library types | No | 3 |
3229(i) | New | 16.4.6.14 [res.on.exception.handling] | §[res.on.exception.handling]#3 cannot apply to types with implicitly declared destructors | Yes | 3 |
119(i) | TC1 | 16.4.6.14 [res.on.exception.handling] | Should virtual functions be allowed to strengthen the exception specification? | Yes |  |
2867(i) | Resolved | 16.4.6.14 [res.on.exception.handling] | Bad footnote about explicit exception-specification | Yes |  |
372(i) | NAD | 16.4.6.14 [res.on.exception.handling] | Inconsistent description of stdlib exceptions | Yes |  |
2839(i) | C++23 | 16.4.6.17 [lib.types.movedfrom] | Self-move-assignment of library types, again | Yes | 2 |

## Section 17 (175 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
1066(i) | C++11 | 17 [support] | Use `[[noreturn]]` attribute in the library | Yes |  |
2709(i) | C++17 | 17.2 [support.types] | `offsetof` is unnecessarily imprecise | Yes | 2 |
1097(i) | C++11 | 17.2 [support.types] | #define __STDCPP_THREADS | Yes |  |
1363(i) | C++11 | 17.2 [support.types] | `offsetof` should be marked `noexcept` | Yes |  |
306(i) | CD1 | 17.2 [support.types] | offsetof macro and non-POD types | Yes |  |
449(i) | CD1 | 17.2 [support.types] | Library Issue 306 Goes Too Far | Yes |  |
1314(i) | NAD | 17.2 [support.types] | `NULL` and `nullptr` | Yes |  |
2251(i) | NAD | 17.2 [support.types] | C++ library should define `ssize_t` | Yes | 3 |
4182(i) | New | 17.2.3 [support.types.nullptr] | Definition of `NULL` is too broad | Yes | 3 |
2950(i) | C++20 | 17.2.5 [support.types.byteops] | `std::byte` operations are misspecified | Yes | 1 |
201(i) | CD1 | 17.3 [support.limits] | Numeric limits terminology wrong | Yes |  |
3217(i) | New | 17.3.1 [support.limits.general] | `<memory>` and `<execution>` should define `__cpp_lib_parallel_algorithm` | Yes | 3 |
3137(i) | C++20 | 17.3.1 [support.limits.general] | Header for `__cpp_lib_to_chars` | Yes | 0 |
3122(i) | C++20 | 17.3.1 [support.limits.general] | `__cpp_lib_chrono_udls` was accidentally dropped | Yes | 0 |
3256(i) | C++20 | 17.3.1 [support.limits.general] | Feature testing macro for `constexpr` algorithms | Yes | 0 |
3257(i) | C++20 | 17.3.1 [support.limits.general] | Missing feature testing macro update from P0858 | Yes | 0 |
3274(i) | C++20 | 17.3.1 [support.limits.general] | Missing feature test macro for `<span>` | Yes | 0 |
4286(i) | Tentatively Ready | 17.3.2 [version.syn] | Some more feature-test macros for fully freestanding features are not marked freestanding | Yes |  |
4411(i) | New | 17.3.2 [version.syn] | Even more feature-test macros for fully freestanding features are not marked freestanding | No | 2 |
3931(i) | New | 17.3.2 [version.syn] | Too many paper bump `__cpp_lib_ranges` | Yes | 3 |
4189(i) | WP | 17.3.2 [version.syn] | `cache_latest_view` should be freestanding | Yes |  |
4126(i) | WP | 17.3.2 [version.syn] | Some feature-test macros for fully freestanding features are not yet marked freestanding | Yes | 2 |
4076(i) | WP | 17.3.2 [version.syn] | `concat_view` should be freestanding | Yes |  |
3887(i) | WP | 17.3.2 [version.syn] | Version macro for `allocate_at_least` | Yes |  |
3841(i) | C++23 | 17.3.2 [version.syn] | `<version>` should not be "all freestanding" | Yes |  |
3437(i) | C++23 | 17.3.2 [version.syn] | `__cpp_lib_polymorphic_allocator` is in the wrong header | Yes | 0 |
3621(i) | C++23 | 17.3.2 [version.syn] | Remove feature-test macro `__cpp_lib_monadic_optional` | Yes |  |
3750(i) | C++23 | 17.3.2 [version.syn] | Too many papers bump `__cpp_lib_format` | Yes |  |
3751(i) | C++23 | 17.3.2 [version.syn] | Missing feature macro for `flat_set` | Yes |  |
3792(i) | C++23 | 17.3.2 [version.syn] | `__cpp_lib_constexpr_algorithms` should also be defined in `<utility>` | Yes |  |
3807(i) | C++23 | 17.3.2 [version.syn] | The feature test macro for `ranges::find_last` should be renamed | Yes |  |
3348(i) | C++20 | 17.3.2 [version.syn] | `__cpp_lib_unwrap_ref` in wrong header | Yes | 2 |
3349(i) | C++20 | 17.3.2 [version.syn] | Missing `__cpp_lib_constexpr_complex` for P0415R1 | Yes | 0 |
3356(i) | C++20 | 17.3.2 [version.syn] | `__cpp_lib_nothrow_convertible` should be `__cpp_lib_is_nothrow_convertible` | Yes | 0 |
3393(i) | C++20 | 17.3.2 [version.syn] | Missing/incorrect feature test macro for coroutines | Yes | 0 |
3635(i) | NAD | 17.3.2 [version.syn] | Add `__cpp_lib_deduction_guides` to feature test macros | Yes | 3 |
3874(i) | NAD | 17.3.2 [version.syn] | Rename `__cpp_lib_ranges_to_container` to `__cpp_lib_ranges_to` | Yes |  |
3808(i) | NAD | 17.3.2 [version.syn] | Inconsistent feature test macros for ranges algorithms | Yes |  |
2248(i) | New | 17.3.5 [numeric.limits] | `numeric_limits::is_iec559` misnamed | No | 4 |
2730(i) | Open | 17.3.5 [numeric.limits] | `numeric_limits` primary template definition | No | 3 |
559(i) | CD1 | 17.3.5 [numeric.limits] | numeric_limits<const T> | Yes |  |
902(i) | NAD Concepts | 17.3.5 [numeric.limits] | Regular is the wrong concept to constrain numeric_limits | Yes |  |
1005(i) | NAD Concepts | 17.3.5 [numeric.limits] | `numeric_limits` partial specializations not concept enabled | Yes |  |
3922(i) | New | 17.3.5.1 [numeric.limits.general] | It's unclear whether `numeric_limits` can be specialized by users | Yes | 3 |
3923(i) | New | 17.3.5.1 [numeric.limits.general] | The specification of `numeric_limits` doesn't clearly distinguish between implementation requirements and user requirements | Yes | 3 |
2422(i) | C++17 | 17.3.5.2 [numeric.limits.members] | `std::numeric_limits<T>::is_modulo` description: "most machines" errata | Yes | 2 |
497(i) | CD1 | 17.3.5.2 [numeric.limits.members] | meaning of numeric_limits::traps for floating point types | Yes |  |
612(i) | CD1 | 17.3.5.2 [numeric.limits.members] | numeric_limits::is_modulo insufficiently defined | Yes |  |
591(i) | NAD Editorial | 17.3.5.2 [numeric.limits.members] | Misleading "built-in | Yes |  |
205(i) | NAD | 17.3.5.2 [numeric.limits.members] | numeric_limits unclear on how to determine floating point types | Yes |  |
184(i) | CD1 | 17.3.5.3 [numeric.special] | numeric_limits<bool> wording problems | Yes |  |
613(i) | CD1 | 17.3.5.3 [numeric.special] | max_digits10 missing from numeric_limits | Yes |  |
554(i) | NAD | 17.3.5.3 [numeric.special] | Problem with lwg DR 184 numeric_limits<bool> | Yes |  |
416(i) | CD1 | 17.3.6 [climits.syn] | definitions of XXX_MIN and XXX_MAX macros in climits | Yes |  |
3370(i) | New | 17.4.1 [cstdint.syn] | §[cstdint.syn]p2 and §[headers]p5 are not sufficiently clear | No | 3 |
2820(i) | C++23 | 17.4.1 [cstdint.syn] | Clarify `<cstdint>` macros | Yes | 3 |
3828(i) | C++23 | 17.4.1 [cstdint.syn] | Sync `intmax_t` and `uintmax_t` with C2x | Yes |  |
593(i) | CD1 | 17.4.1 [cstdint.syn] | __STDC_CONSTANT_MACROS | Yes |  |
557(i) | NAD Editorial | 17.4.1 [cstdint.syn] | TR1: div(_Longlong, _Longlong) vs div(intmax_t, intmax_t) | Yes |  |
553(i) | NAD Editorial | 17.4.1 [cstdint.syn] | very minor editorial change `intptr_t` / `uintptr_t` | Yes |  |
841(i) | NAD Editorial | 17.4.1 [cstdint.syn] | cstdint.syn inconsistent with C99 | Yes |  |
2764(i) | Dup | 17.4.1 [cstdint.syn] | Are `<cstddint>` macros optional? | Yes | 3 |
3084(i) | New | 17.5 [support.start.term] | Termination in C++ is unclear | No | 3 |
2815(i) | New | 17.5 [support.start.term] | `quick_exit` can deadlock | Yes | 3 |
993(i) | C++11 | 17.5 [support.start.term] | `_Exit` needs better specification | Yes |  |
1144(i) | C++11 | 17.5 [support.start.term] | "thread safe" is undefined | Yes |  |
3(i) | TC1 | 17.5 [support.start.term] | Atexit registration during atexit() call is not described | Yes |  |
2458(i) | C++17 | 17.6 [support.dynamic] | N3778 and new library deallocation signatures | Yes | 2 |
2510(i) | C++17 | 17.6 [support.dynamic] | Tag types should not be `DefaultConstructible` | Yes | 2 |
3106(i) | NAD | 17.6.2 [new.syn] | `nothrow` should be `inline constexpr` rather that `extern const` | Yes | 2 |
2425(i) | C++17 | 17.6.3 [new.delete] | `operator delete(void*, size_t)` doesn't invalidate pointers sufficiently | Yes | 0 |
1006(i) | C++11 | 17.6.3 [new.delete] | `operator delete` in garbage collected implementation | Yes |  |
9(i) | TC1 | 17.6.3 [new.delete] | Operator new(0) calls should not yield the same pointer | Yes |  |
2368(i) | Resolved | 17.6.3 [new.delete] | Replacing global `operator new` | Yes | 2 |
3086(i) | New | 17.6.3.2 [new.delete.single] | Possible problem in §[new.delete.single] | Yes | 3 |
2737(i) | New | 17.6.3.2 [new.delete.single] | Consider relaxing object size restrictions for single-object allocation functions | No | 3 |
206(i) | CD1 | 17.6.3.2 [new.delete.single] | operator new(size_t, nothrow) may become unlinked to ordinary operator new if ordinary version replaced | Yes |  |
319(i) | CD1 | 17.6.3.2 [new.delete.single] | Storage allocation wording confuses "Required behavior", "Requires" | Yes |  |
627(i) | NAD | 17.6.3.2 [new.delete.single] | Low memory and exceptions | Yes |  |
298(i) | CD1 | 17.6.3.3 [new.delete.array] | ::operator delete[] requirement incorrect/insufficient | Yes |  |
3789(i) | NAD | 17.6.3.3 [new.delete.array] | Precondition of (not replaced) `operator delete[]` | Yes |  |
2303(i) | New | 17.6.3.4 [new.delete.placement] | Explicit instantiation of `std::vector<UserType>` broken? | No | 3 |
2302(i) | Pending NAD | 17.6.3.4 [new.delete.placement] | Passing null pointer to placement new | Yes | 2 |
114(i) | TC1 | 17.6.3.4 [new.delete.placement] | Placement forms example in error twice | Yes |  | 196
196(i) | Dup | 17.6.3.4 [new.delete.placement] | Placement new example has alignment problems | Yes |  | 114
2508(i) | New | 17.6.3.5 [new.delete.dataraces] | §[new.delete.dataraces] wording needs to be updated | No | 3 |
1524(i) | C++11 | 17.6.3.5 [new.delete.dataraces] | Allocation functions are missing happens-before requirements and guarantees | Yes |  |
1366(i) | Resolved | 17.6.3.5 [new.delete.dataraces] | New-handler and data races | Yes |  |
1365(i) | Resolved | 17.6.4 [alloc.errors] | Thread-safety of handler functions | Yes |  |
2378(i) | C++17 | 17.6.4.1 [bad.alloc] | Behaviour of standard exception types | Yes | 0 |
994(i) | C++11 | 17.6.4.3 [new.handler] | `quick_exit` should terminate well-defined | Yes |  |
4130(i) | Open | 17.6.5 [ptr.launder] | Preconditions for `std::launder` might be overly strict | Yes | 3 |
3495(i) | C++23 | 17.6.5 [ptr.launder] | `constexpr launder` makes pointers to inactive members of unions usable | Yes | 3 |
2859(i) | C++20 | 17.6.5 [ptr.launder] | Definition of reachable in [ptr.launder] misses pointer arithmetic from pointer-interconvertible object | Yes | 2 |
2821(i) | Resolved | 17.6.5 [ptr.launder] | `std::launder()` should be marked as `[[nodiscard]]` | Yes | 3 |
2860(i) | NAD | 17.6.5 [ptr.launder] | `launder` and base class subobjects | Yes | 2 |
3624(i) | New | 17.7 [support.rtti] | Inconsistency of `<typeinfo>`, `<initializer_list>`, and `<compare>` in the standard library | Yes | 3 |
2398(i) | Open | 17.7.3 [type.info] | `type_info`'s destructor shouldn't be required to be virtual | Yes | 3 |
108(i) | TC1 | 17.7.3 [type.info] | Lifetime of exception::what() return unspecified | Yes |  |
2144(i) | C++14 | 17.7.7 [type.index] | Missing `noexcept` specification in `type_index` | Yes |  |
1078(i) | NAD Concepts | 17.7.7 [type.index] | DE-17: Remove class type_index | Yes |  |
4207(i) | New | 17.8.2.2 [support.srcloc.cons] | Point of reference for `source_location` is not specified when used in an default template argument | Yes | 3 |
3396(i) | C++20 | 17.8.2.2 [support.srcloc.cons] | Clarify point of reference for `source_location::current()` (DE 169) | Yes | 2 |
70(i) | TC1 | 17.9 [support.exception] | Uncaught_exception() missing throw() specification | Yes |  |
269(i) | NAD | 17.9 [support.exception] | cstdarg and unnamed parameters | Yes |  |
4087(i) | SG16 | 17.9.3 [exception] | Standard exception messages have unspecified encoding | Yes | 3 |
471(i) | C++11 | 17.9.3 [exception] | result of `what()` implementation-defined | Yes |  |
266(i) | CD1 | 17.9.4 [bad.exception] | bad_exception::~bad_exception() missing Effects clause | Yes |  |
2088(i) | Resolved | 17.9.5 [exception.terminate] | `std::terminate` problem | Yes | 3 |
2111(i) | C++17 | 17.9.5.4 [terminate] | Which `unexpected`/`terminate` handler is called from the exception handling runtime? | Yes | 3 |
313(i) | NAD | 17.9.5.4 [terminate] | set_terminate and set_unexpected question | Yes |  |
314(i) | NAD | 17.9.5.4 [terminate] | Is the stack unwound when terminate() is called? | Yes |  |
1130(i) | C++11 | 17.9.7 [propagation] | `copy_exception` name misleading | Yes |  |
744(i) | CD1 | 17.9.7 [propagation] | What is the lifetime of an exception pointed to by an `exception_ptr`? | Yes |  |
746(i) | CD1 | 17.9.7 [propagation] | `current_exception` may fail with `bad_alloc` | Yes |  |
820(i) | CD1 | 17.9.7 [propagation] | `current_exception()`'s interaction with throwing copy ctors | Yes |  |
829(i) | CD1 | 17.9.7 [propagation] | current_exception wording unclear about exception type | Yes |  |
1135(i) | Resolved | 17.9.7 [propagation] | `exception_ptr` should support contextual conversion to `bool` | Yes |  |
1307(i) | Resolved | 17.9.7 [propagation] | `exception_ptr` and `allocator` pointers don't understand != | Yes |  |
1364(i) | Resolved | 17.9.7 [propagation] | It is not clear how `exception_ptr` is synchronized | Yes |  |
707(i) | NAD | 17.9.7 [propagation] | null pointer constant for `exception_ptr` | Yes |  |
745(i) | NAD | 17.9.7 [propagation] | copy_exception API slices. | Yes |  |
1369(i) | NAD | 17.9.7 [propagation] | `rethrow_exception` may introduce data races | Yes |  |
2855(i) | C++17 | 17.9.8 [except.nested] | `std::throw_with_nested("string_literal")` | Yes | 0 |
2483(i) | C++17 | 17.9.8 [except.nested] | `throw_with_nested()` should use `is_final` | Yes | 2 |
2484(i) | C++17 | 17.9.8 [except.nested] | `rethrow_if_nested()` is doubly unimplementable | Yes | 2 |
2784(i) | C++17 | 17.9.8 [except.nested] | Resolution to LWG 2484 is missing "otherwise, no effects" and is hard to parse | Yes | 0 |
819(i) | C++11 | 17.9.8 [except.nested] | rethrow_if_nested | Yes |  |
1136(i) | C++11 | 17.9.8 [except.nested] | Incomplete specification of `nested_exception::rethrow_nested()` | Yes |  |
1216(i) | C++11 | 17.9.8 [except.nested] | LWG 1066 Incomplete? | Yes |  |
1370(i) | C++11 | 17.9.8 [except.nested] | `throw_with_nested` should not use perfect forwarding | Yes |  |
1008(i) | NAD | 17.9.8 [except.nested] | `nested_exception` wording unclear | Yes |  |
1132(i) | NAD | 17.9.8 [except.nested] | JP-30: nested exceptions | Yes |  |
1007(i) | NAD Concepts | 17.9.8 [except.nested] | `throw_with_nested` not concept enabled | Yes |  |
2453(i) | New | 17.11 [support.initlist] | §[iterator.range] and now [iterator.container] aren't available via `<initializer_list>` | No | 3 |
2493(i) | New | 17.11 [support.initlist] | `initializer_list` supports incomplete classes | No | 4 |
2432(i) | NAD | 17.11 [support.initlist] | `initializer_list` assignability | Yes | 2 |
906(i) | NAD Concepts | 17.11 [support.initlist] | `ObjectType` is the wrong concept to constrain `initializer_list` | Yes |  |
4051(i) | New | 17.12.2 [cmp.categories] | A less hacky and more useful way to compare comparison category types | Yes | 3 |
3295(i) | Resolved | 17.12.2 [cmp.categories] | Comparison category `operator==` are mis-specified | Yes | 1 |
3239(i) | Resolved | 17.12.2.2 [cmp.partialord] | Hidden friends should be specified more narrowly | Yes |  |
3584(i) | New | 17.12.3 [cmp.common] | Clarify common comparison category conversions | Yes | 3 |
3587(i) | New | 17.12.4 [cmp.concept] | `std::three_way_comparable_with<T, U, void>` can be satisfied but can't be modeled | No | 3 |
3360(i) | C++20 | 17.12.4 [cmp.concept] | `three_way_comparable_with` is inconsistent with similar concepts | Yes | 0 |
3932(i) | New | 17.12.6 [cmp.alg] | Expression-equivalence is sometimes unimplementable when passing prvalue expressions to comparison CPOs | No | 3 |
3491(i) | New | 17.12.6 [cmp.alg] | What is a "decayed type"? | No | 3 |
4157(i) | WP | 17.12.6 [cmp.alg] | The resolution of LWG3465 was damaged by P2167R3 | Yes |  |
3465(i) | C++23 | 17.12.6 [cmp.alg] | `compare_partial_order_fallback` requires `F < E` | Yes | 0 |
3324(i) | C++20 | 17.12.6 [cmp.alg] | Special-case `std::strong/weak/partial_order` for pointers | Yes | 0 |
4305(i) | Tentatively Ready | 17.12.7 [compare.type] | Missing user requirements on `type_order` template | Yes |  |
3653(i) | New | 17.13.2 [coroutine.syn] | `<coroutine>` is freestanding, but uses `std::hash` which is not | No | 3 |
3330(i) | C++20 | 17.13.2 [coroutine.syn] | Include `<compare>` from most library headers | Yes | 0 |
3469(i) | Resolved | 17.13.4.7 [coroutine.handle.promise] | Precondition of `coroutine_handle::promise` may be insufficient | Yes | 2 |
3460(i) | C++23 | 17.13.5.2.4 [coroutine.handle.noop.resumption] | Unimplementable `noop_coroutine_handle` guarantees | Yes | 2 |
2099(i) | C++14 | 17.14 [support.runtime] | Unnecessary constraints of `va_start()` usage | Yes |  |
894(i) | C++11 | 17.14 [support.runtime] | longjmp and destructors | Yes |  |
619(i) | CD1 | 17.14 [support.runtime] | Longjmp wording problem | Yes |  |
2155(i) | Resolved | 17.14 [support.runtime] | Macro `__bool_true_false_are_defined` should be removed | Yes | 4 |
2241(i) | Resolved | 17.14 [support.runtime] | `<cstdalign>` and `#define` of `alignof` | Yes | 2 |
1265(i) | NAD | 17.14 [support.runtime] | `longjmp` and destructors | Yes |  |
4388(i) | New | 17.14.2 [cstdarg.syn] | Align new definition of `va_start` with C23 | Yes | 1 |
3945(i) | New | 17.14.2 [cstdarg.syn] | §[cstdarg.syn] 'Compatible types' are undefined | No | 3 |
3652(i) | NAD | 17.14.3 [csetjmp.syn] | Can we relax the preconditions of `longjmp`? | Yes |  |
2879(i) | Resolved | 17.14.4 [csignal.syn] | Removing C dependencies from signal handler wording | Yes |  |
3756(i) | C++23 | 17.14.5 [support.signal] | Is the `std::atomic_flag` class signal-safe? | Yes | 3 |
2536(i) | C++17 | 17.15 [support.c.headers] | What should `<complex.h>` do? | Yes | 2 |
2835(i) | C++17 | 17.15 [support.c.headers] | LWG 2536 seems to misspecify `<tgmath.h>` | Yes | 0 |
551(i) | CD1 | 17.15 [support.c.headers] | <ccomplex> | Yes |  |
143(i) | NAD | 17.15 [support.c.headers] | C .h header wording unclear | Yes |  |
3954(i) | New | 17.15.1 [support.c.headers.general] | Feature-test macros in C headers (`<stddef.h>` etc.) | No | 3 |
3827(i) | C++23 | 17.15.4 [stdalign.h.syn] | Deprecate `<stdalign.h>` and `<stdbool.h>` macros | Yes |  |
3883(i) | New | 17.15.7 [support.c.headers.other] | §[support.c.headers.other] Ambiguity in the requirements for includes | Yes | 4 |
3799(i) | New | 17.15.7 [support.c.headers.other] | Should `<math.h>` provide 3-argument `::hypot` overloads? | No | 3 |
3484(i) | New | 17.15.7 [support.c.headers.other] | Should `<stddef.h>` declare `::nullptr_t`? | Yes | 3 |
3782(i) | C++23 | 17.15.7 [support.c.headers.other] | Should `<math.h>` declare `::lerp`? | Yes |  |

## Section 18 (20 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
3895(i) | New | 18.3 [concepts.syn] | Various relation concepts are missing default values of the second template parameters | Yes | 3 |
3182(i) | C++20 | 18.4.2 [concept.same] | Specification of `Same` could be clearer | Yes | 0 |
3608(i) | New | 18.4.4 [concept.convertible] | `convertible_to` and temporary-bound references | No | 3 |
3459(i) | New | 18.4.4 [concept.convertible] | Why doesn't `std::convertible_to` have semantic requirement when `To` is reference-to-function type? | No | 3 |
3461(i) | C++23 | 18.4.4 [concept.convertible] | `convertible_to`'s description mishandles cv-qualified `void` | Yes | 0 |
3557(i) | C++23 | 18.4.4 [concept.convertible] | The `static_cast` expression in `convertible_to` has the wrong operand | Yes |  |
3194(i) | C++20 | 18.4.4 [concept.convertible] | `ConvertibleTo` prose does not match code | Yes | 1 |
3151(i) | Resolved | 18.4.4 [concept.convertible] | `ConvertibleTo` rejects conversions from array and function types | Yes | 3 |
3153(i) | C++20 | 18.4.6 [concept.common] | `Common` and `common_type` have too little in common | Yes | 0 |
3154(i) | C++20 | 18.4.6 [concept.common] | `Common` and `CommonReference` have a common defect | Yes | 0 |
4165(i) | New | 18.4.9 [concept.swappable] | Should swapping a built-in array or `std::array` with itself result in UB? | No | 3 |
4041(i) | New | 18.4.9 [concept.swappable] | The requirements on literal type in [concept.swappable] should be removed | Yes | 4 |
3175(i) | C++20 | 18.4.9 [concept.swappable] | The `CommonReference` requirement of concept `SwappableWith` is not satisfied in the example | Yes | 1 |
3345(i) | Resolved | 18.4.9 [concept.swappable] | Incorrect usages of "models" versus "satisfies" | Yes | 2 |
3149(i) | C++20 | 18.4.12 [concept.default.init] | `DefaultConstructible` should require default initialization | Yes | 2 |
3338(i) | C++20 | 18.4.12 [concept.default.init] | Rename `default_constructible` to `default_initializable` | Yes | 0 |
3421(i) | C++23 | 18.5.2 [concept.booleantestable] | Imperfect ADL emulation for `boolean-testable` | Yes | 0 |
3329(i) | C++20 | 18.5.5 [concept.totallyordered] | `totally_ordered_with` both directly and indirectly requires `common_reference_with` | Yes | 0 |
3331(i) | C++20 | 18.5.5 [concept.totallyordered] | Define `totally_ordered/_with` in terms of `partially-ordered-with` | Yes | 0 |
3141(i) | C++20 | 18.6 [concepts.object] | `CopyConstructible` doesn't preserve source values | Yes | 2 |

## Section 19 (37 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
1371(i) | NAD | 19 [diagnostics] | Standard exceptions require stronger no-throw guarantees | Yes |  |
254(i) | CD1 | 19.2 [std.exceptions] | Exception types in clause 19 are constructed from `std::string` | Yes |  |
2073(i) | NAD | 19.2 [std.exceptions] | Library exceptions that take string arguments | Yes |  |
3011(i) | Open | 19.3 [assertions] | Requirements for `assert(E)` inconsistent with C | No | 2 |
2234(i) | C++17 | 19.3 [assertions] | `assert()` should allow usage in constant expressions | Yes | 2 |
2559(i) | C++17 | 19.3 [assertions] | Error in LWG 2234's resolution | Yes | 0 |
2413(i) | NAD | 19.3 [assertions] | `assert` macro is overconstrained | Yes | 4 |
288(i) | CD1 | 19.4 [errno] | <cerrno> requirements missing macro EILSEQ | Yes |  |
3629(i) | C++23 | 19.5 [syserr] | `make_error_code` and `make_error_condition` are customization points | Yes | 2 |
1237(i) | C++11 | 19.5 [syserr] | Constrained `error_code`/`error_condition members` | Yes |  |
804(i) | CD1 | 19.5 [syserr] | Some problems with classes `error_code`/`error_condition` | Yes |  |
805(i) | CD1 | 19.5 [syserr] | `posix_error::posix_errno` concerns | Yes |  |
697(i) | Resolved | 19.5 [syserr] | New `<system_error>` header leads to name clashes | Yes |  |
832(i) | NAD | 19.5 [syserr] | Applying constexpr to System error support | Yes |  |
3869(i) | C++23 | 19.5.2 [system.error.syn] | Deprecate `std::errc` constants related to UNIX STREAMS | Yes |  |
2686(i) | C++17 | 19.5.2 [system.error.syn] | Why is `std::hash` specialized for `error_code`, but not `error_condition`? | Yes | 3 |
2145(i) | C++14 | 19.5.3 [syserr.errcat] | `error_category` default constructor | Yes |  |
890(i) | C++11 | 19.5.3 [syserr.errcat] | Improving `<system_error>` initialization | Yes |  |
4156(i) | SG16 | 19.5.3.2 [syserr.errcat.virtuals] | `error_category` messages have unspecified encoding | Yes | 3 |
3019(i) | New | 19.5.3.4 [syserr.errcat.derived] | Presentation of "program defined classes derived from `error_category`" [syserr.errcat.derived] unclear and contains mistakes | No | 3 |
3598(i) | C++23 | 19.5.3.5 [syserr.errcat.objects] | `system_category().default_error_condition(0)` is underspecified | Yes |  |
1372(i) | C++11 | 19.5.3.5 [syserr.errcat.objects] | Adopt recommended practice for standard error categories | Yes |  |
2992(i) | NAD | 19.5.3.5 [syserr.errcat.objects] | `system_category()` and `error_code::error_code()` should be `constexpr` | Yes |  |
3053(i) | New | 19.5.4.1 [syserr.errcode.overview] | Prohibit `error_code` construction from rvalues of `error_category` | Yes | 3 |
825(i) | Resolved | 19.5.4.1 [syserr.errcode.overview] | Missing rvalues reference stream insert/extract operators? | Yes |  |
1229(i) | Resolved | 19.5.4.3 [syserr.errcode.modifiers] | `error_code operator=` typo | Yes |  |
971(i) | NAD | 19.5.4.5 [syserr.errcode.nonmembers] | Spurious diagnostic conversion function | Yes |  |
2109(i) | C++14 | 19.5.7 [syserr.hash] | Incorrect requirements for `hash` specializations | Yes |  |
698(i) | CD1 | 19.5.8.1 [syserr.syserr.overview] | `system_error` needs `const char*` constructors | Yes |  |
3162(i) | New | 19.5.8.2 [syserr.syserr.members] | `system_error::system_error(error_code ec)` not explicit | Yes | 3 |
3112(i) | C++20 | 19.5.8.2 [syserr.syserr.members] | `system_error` and `filesystem_error` constructors taking a `string` may not be able to meet their postconditions | Yes | 0 |
1103(i) | C++11 | 19.5.8.2 [syserr.syserr.members] | `system_error` constructor postcondition overly strict | Yes |  |
3625(i) | Open | 19.6.2 [stacktrace.syn] | Should `<stacktrace>` provide range access function templates? | Yes | 3 |
3515(i) | C++23 | 19.6.2 [stacktrace.syn] | §[stacktrace.basic.nonmem]: `operator<<` should be less templatized | Yes | 2 |
3514(i) | Resolved | 19.6.2 [stacktrace.syn] | `stacktrace` should add type alias `pmr::stacktrace` | Yes | 3 |
3507(i) | Open | 19.6.3.4 [stacktrace.entry.query] | P0881R7 ("stacktrace") does not define "actual file name", "actual line number" | No | 2 |
3626(i) | New | 19.6.4.1 [stacktrace.basic.overview] | Is `std::basic_stacktrace` required to use contiguous storage? | Yes | 3 |

## Section 20 (217 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
1073(i) | C++11 | 20.2 [memory] | Declaration of `allocator_arg` should be `constexpr` | Yes |  |
1401(i) | C++11 | 20.2 [memory] | Provide support for `unique_ptr<T> == nullptr` | Yes |  |
1402(i) | C++11 | 20.2 [memory] | `nullptr` constructors for smart pointers should be `constexpr` | Yes |  |
1233(i) | NAD Editorial | 20.2 [memory] | Missing `unique_ptr` signatures in synopsis | Yes |  |
1026(i) | NAD Concepts | 20.2 [memory] | Smart pointers need to be concept-constrained templates | Yes |  |
4431(i) | New | 20.2.2 [memory.syn] | Parallel `std::ranges::destroy` should allow exceptions | Yes |  |
3552(i) | C++23 | 20.2.2 [memory.syn] | Parallel specialized memory algorithms should require forward iterators | Yes |  |
3814(i) | C++23 | 20.2.2 [memory.syn] | Add freestanding items requested by NB comments | Yes |  |
3303(i) | C++20 | 20.2.2 [memory.syn] | Bad "`constexpr`" marker for `destroy/destroy_n` | Yes | 0 |
3454(i) | Open | 20.2.3 [pointer.traits] | `pointer_traits::pointer_to` should be `constexpr` | Yes | 4 |
3545(i) | C++23 | 20.2.3 [pointer.traits] | `std::pointer_traits` should be SFINAE-friendly | Yes | 2 |
1404(i) | C++11 | 20.2.3 [pointer.traits] | `pointer_traits` should have a `size_type` member | Yes |  |
4058(i) | LEWG | 20.2.4 [pointer.conversion] | `std::to_address()` should be SFINAE-friendly | Yes | 3 |
3374(i) | C++20 | 20.2.4 [pointer.conversion] | P0653 + P1006 should have made the other `std::to_address` overload `constexpr` | Yes | 0 |
4290(i) | New | 20.2.5 [ptr.align] | Missing Mandates clauses on `is_sufficiently_aligned` | Yes | 2 |
2421(i) | New | 20.2.5 [ptr.align] | Non-specification of handling zero size in `std::align` [ptr.align] | No | 3 |
2377(i) | C++17 | 20.2.5 [ptr.align] | `std::align` requirements overly strict | Yes | 0 |
4283(i) | New | 20.2.6 [obj.lifetime] | `std::trivially_relocate` needs stronger preconditions on "nested" objects with dynamic lifetime | Yes | 2 |
4168(i) | New | 20.2.6 [obj.lifetime] | `std::start_lifetime_as` inadvertently has undefined behavior due to use of `std::bit_cast` | Yes | 3 |
4282(i) | New | 20.2.6 [obj.lifetime] | Imprecise Throws: clause in `std::relocate` | Yes | 2 |
1403(i) | C++11 | 20.2.7 [allocator.tag] | Inconsistent definitions for `allocator_arg` | Yes |  |
3901(i) | NAD | 20.2.8 [allocator.uses] | Is uses-allocator construction of a cv-qualified object type still well-formed after LWG 3870? | Yes |  |
4312(i) | Tentatively Ready | 20.2.8.2 [allocator.uses.construction] | Const and value category mismatch for `allocator_arg_t`/`allocator_arg` in the description of uses-allocator construction | Yes |  |
3192(i) | New | 20.2.8.2 [allocator.uses.construction] | §[allocator.uses.construction] functions misbehave for `const` types | Yes | 3 |
3525(i) | C++23 | 20.2.8.2 [allocator.uses.construction] | `uses_allocator_construction_args` fails to handle types convertible to `pair` | Yes | 3 |
3526(i) | C++23 | 20.2.8.2 [allocator.uses.construction] | Return types of `uses_allocator_construction_args` unspecified | Yes | 3 |
3527(i) | C++23 | 20.2.8.2 [allocator.uses.construction] | `uses_allocator_construction_args` handles rvalue pairs of rvalue references incorrectly | Yes |  |
3677(i) | C++23 | 20.2.8.2 [allocator.uses.construction] | Is a cv-qualified `pair` specially handled in uses-allocator construction? | Yes | 2 |
3821(i) | C++23 | 20.2.8.2 [allocator.uses.construction] | `uses_allocator_construction_args` should have overload for `pair-like` | Yes | 2 |
3185(i) | C++20 | 20.2.8.2 [allocator.uses.construction] | Uses-allocator construction functions missing `constexpr` and `noexcept` | Yes | 0 |
3187(i) | C++20 | 20.2.8.2 [allocator.uses.construction] | P0591R4 reverted DR 2586 fixes to `scoped_allocator_adaptor::construct()` | Yes |  |
3321(i) | C++20 | 20.2.8.2 [allocator.uses.construction] | `uninitialized_construct_using_allocator` should use `construct_at` | Yes | 0 |
2284(i) | C++14 | 20.2.9 [allocator.traits] | Inconsistency in `allocator_traits::max_size` | Yes |  |
3665(i) | New | 20.2.9.2 [allocator.traits.types] | Is `std::allocator_traits<Alloc>::rebind_alloc` SFINAE-friendly? | No | 3 |
1318(i) | NAD | 20.2.9.2 [allocator.traits.types] | N2982 removes previous allocator capabilities | Yes |  | 1375
1285(i) | C++11 | 20.2.9.3 [allocator.traits.members] | `allocator_traits` call to `new` | Yes |  |
1286(i) | C++11 | 20.2.9.3 [allocator.traits.members] | `allocator_traits::select_on_container_copy_construction` type-o | Yes |  |
3916(i) | New | 20.2.10 [default.allocator] | `allocator`, `polymorphic_allocator`, and containers should forbid cv-qualified types | No | 3 |
3917(i) | New | 20.2.10 [default.allocator] | Validity of `allocator<void>` and possibly `polymorphic_allocator<void>` should be clarified | Yes | 3 |
3170(i) | C++23 | 20.2.10 [default.allocator] | `is_always_equal` added to `std::allocator` makes the standard library treat derived types as always equal | Yes | 2 |
3035(i) | C++20 | 20.2.10 [default.allocator] | `std::allocator`'s constructors should be `constexpr` | Yes | 0 |
3307(i) | C++20 | 20.2.10 [default.allocator] | `std::allocator<void>().allocate(n)` | Yes | 0 |
2103(i) | C++14 | 20.2.10 [default.allocator] | `std::allocator_traits<std::allocator<T>>::propagate_on_container_move_assignment` | Yes |  |
1027(i) | NAD Concepts | 20.2.10 [default.allocator] | `std::allocator` needs to be a concept-constrained template | Yes |  |
3684(i) | New | 20.2.10.2 [allocator.members] | `std::allocator<T>::allocate_at_least` in constant evaluation | Yes | 3 |
3190(i) | C++20 | 20.2.10.2 [allocator.members] | `std::allocator::allocate` sometimes returns too little storage | Yes | 3 |
234(i) | CD1 | 20.2.10.2 [allocator.members] | Typos in allocator definition | Yes |  |
400(i) | CD1 | 20.2.10.2 [allocator.members] | redundant type cast in lib.allocator.members | Yes |  |
578(i) | CD1 | 20.2.10.2 [allocator.members] | purpose of hint to allocator::allocate() | Yes |  |
634(i) | CD1 | 20.2.10.2 [allocator.members] | `allocator.address()` doesn't work for types overloading `operator&` | Yes |  | 350
2089(i) | Resolved | 20.2.10.2 [allocator.members] | `std::allocator::construct` should use uniform initialization | Yes | 2 |
350(i) | Dup | 20.2.10.2 [allocator.members] | allocator<>::address | Yes |  | 634
2296(i) | C++17 | 20.2.11 [specialized.addressof] | `std::addressof` should be `constexpr` | Yes | 3 |
2598(i) | C++17 | 20.2.11 [specialized.addressof] | `addressof` works on temporaries | Yes | 3 |
970(i) | C++11 | 20.2.11 [specialized.addressof] | `addressof` overload unneeded | Yes |  |
2948(i) | C++20 | 20.3.1 [unique.ptr] | `unique_ptr` does not define `operator<<` for stream output | Yes | 0 |
673(i) | CD1 | 20.3.1 [unique.ptr] | `unique_ptr` update | Yes |  |
740(i) | CD1 | 20.3.1 [unique.ptr] | Please remove `*_ptr<T[N]>` | Yes |  |
762(i) | CD1 | 20.3.1 [unique.ptr] | `std::unique_ptr` requires complete type? | Yes |  |
1193(i) | C++11 | 20.3.1.2 [unique.ptr.dltr] | `default_delete` cannot be instantiated with incomplete types | Yes |  |
854(i) | C++11 | 20.3.1.2.2 [unique.ptr.dltr.dflt] | `default_delete` converting constructor underspecified | Yes |  |
1517(i) | C++11 | 20.3.1.2.2 [unique.ptr.dltr.dflt] | default_delete's default constructor should be trivial | Yes |  |
938(i) | C++11 | 20.3.1.2.3 [unique.ptr.dltr.dflt1] | `default_delete<T[]>::operator()` should only accept `T*` | Yes |  |
3159(i) | New | 20.3.1.3 [unique.ptr.single] | §[unique.ptr.single] requirements on deleter may be too strict | No | 3 |
2262(i) | Open | 20.3.1.3 [unique.ptr.single] | Requirement for `unique_ptr<T>::get_deleter()(p)` to be able to destroy the `unique_ptr` | Yes | 3 |
2361(i) | C++17 | 20.3.1.3 [unique.ptr.single] | Apply 2299 resolution throughout library | Yes |  |
1303(i) | C++11 | 20.3.1.3 [unique.ptr.single] | `shared_ptr`, `unique_ptr`, and rvalue references v2 | Yes |  |
834(i) | Resolved | 20.3.1.3 [unique.ptr.single] | `unique_ptr::pointer` requirements underspecified | Yes |  |
983(i) | Resolved | 20.3.1.3 [unique.ptr.single] | `unique_ptr` reference deleters should not be moved from | Yes |  |
4144(i) | WP | 20.3.1.3.1 [unique.ptr.single.general] | Disallow `unique_ptr<T&, D>` | Yes |  |
3588(i) | NAD | 20.3.1.3.1 [unique.ptr.single.general] | Strike out purposeless UB involving the deleter in members functions of `unique_ptr` | Yes |  |
3632(i) | C++23 | 20.3.1.3.2 [unique.ptr.single.ctor] | `unique_ptr` "Mandates: This constructor is not selected by class template argument deduction" | Yes |  |
2944(i) | C++20 | 20.3.1.3.2 [unique.ptr.single.ctor] | LWG 2905 accidentally removed requirement that construction of the deleter doesn't throw an exception | Yes | 0 |
2801(i) | C++17 | 20.3.1.3.2 [unique.ptr.single.ctor] | Default-constructibility of `unique_ptr` | Yes | 2 |
2905(i) | C++17 | 20.3.1.3.2 [unique.ptr.single.ctor] | `is_constructible_v<unique_ptr<P, D>, P, D const &>` should be false when `D` is not copy constructible | Yes |  |
932(i) | Resolved | 20.3.1.3.2 [unique.ptr.single.ctor] | `unique_ptr(pointer p)` for pointer deleter types | Yes |  |
950(i) | Resolved | 20.3.1.3.2 [unique.ptr.single.ctor] | `unique_ptr` converting ctor shouldn't accept array form | Yes |  |
1100(i) | Resolved | 20.3.1.3.2 [unique.ptr.single.ctor] | `auto_ptr` to `unique_ptr` conversion | Yes |  |
3164(i) | NAD | 20.3.1.3.2 [unique.ptr.single.ctor] | Unhelpful "shall not participate" constraints for `unique_ptr` with reference deleter | Yes |  |
3455(i) | C++23 | 20.3.1.3.4 [unique.ptr.single.asgn] | Incorrect Postconditions on `unique_ptr` move assignment | Yes | 0 |
2047(i) | C++14 | 20.3.1.3.4 [unique.ptr.single.asgn] | Incorrect "mixed" move-assignment semantics of `unique_ptr` | Yes |  |
2246(i) | C++14 | 20.3.1.3.4 [unique.ptr.single.asgn] | `unique_ptr` assignment effects w.r.t. deleter | Yes |  |
1021(i) | C++11 | 20.3.1.3.4 [unique.ptr.single.asgn] | Allow `nullptr_t` assignments to `unique_ptr` | Yes |  |
2228(i) | Resolved | 20.3.1.3.4 [unique.ptr.single.asgn] | Missing SFINAE rule in `unique_ptr` templated assignment | Yes | 3 |
4324(i) | New | 20.3.1.3.5 [unique.ptr.single.observers] | `unique_ptr<void>::operator*` is not SFINAE-friendly | Yes | 3 |
3911(i) | New | 20.3.1.3.5 [unique.ptr.single.observers] | `unique_ptr`'s `operator*` is missing a mandate | Yes | 3 |
4148(i) | WP | 20.3.1.3.5 [unique.ptr.single.observers] | `unique_ptr::operator*` should not allow dangling references | Yes |  |
2762(i) | C++23 | 20.3.1.3.5 [unique.ptr.single.observers] | `unique_ptr operator*()` should be `noexcept` | Yes | 3 |
686(i) | NAD | 20.3.1.3.5 [unique.ptr.single.observers] | `unique_ptr` and `shared_ptr` fail to specify non-convertibility to int for unspecified-bool-type | Yes |  |
998(i) | C++11 | 20.3.1.3.6 [unique.ptr.single.modifiers] | Smart pointer referencing its owner | Yes |  |
806(i) | CD1 | 20.3.1.3.6 [unique.ptr.single.modifiers] | `unique_ptr::reset` effects incorrect, too permissive | Yes |  |
933(i) | NAD | 20.3.1.3.6 [unique.ptr.single.modifiers] | Unique_ptr defect | Yes |  |
2118(i) | Resolved | 20.3.1.4 [unique.ptr.runtime] | [CD] `unique_ptr` for array does not support cv qualification conversion of actual argument | Yes | 1 |
1293(i) | Resolved | 20.3.1.4 [unique.ptr.runtime] | `unique_ptr<T[], D>` needs to get rid of unspecified-pointer-type | Yes |  |
2060(i) | NAD Editorial | 20.3.1.4 [unique.ptr.runtime] | `unique_ptr<T[]>(nullptr_t)` missing `noexcept` | Yes |  |
2520(i) | C++17 | 20.3.1.4.2 [unique.ptr.runtime.ctor] | N4089 broke initializing `unique_ptr<T[]>` from a `nullptr` | Yes | 2 |
2169(i) | C++14 | 20.3.1.4.5 [unique.ptr.runtime.modifiers] | Missing `reset()` requirements in `unique_ptr` specialization | Yes |  |
821(i) | C++11 | 20.3.1.4.5 [unique.ptr.runtime.modifiers] | Minor cleanup : `unique_ptr` | Yes |  |
3426(i) | C++23 | 20.3.1.6 [unique.ptr.special] | `operator<=>(const unique_ptr<T, D>&, nullptr_t)` can't get no satisfaction | Yes | 0 |
1297(i) | Resolved | 20.3.1.6 [unique.ptr.special] | `unique_ptr`'s relational operator functions should induce a total order | Yes |  |
2376(i) | C++17 | 20.3.2.1 [util.smartptr.weak.bad] | `bad_weak_ptr::what()` overspecified | Yes |  |
2594(i) | New | 20.3.2.2 [util.smartptr.shared] | Contradicting definition of empty `shared_ptr` on `shared_ptr(nullptr, d)` | Yes | 3 |
2996(i) | C++20 | 20.3.2.2 [util.smartptr.shared] | Missing rvalue overloads for `shared_ptr` operations | Yes |  |
3018(i) | C++20 | 20.3.2.2 [util.smartptr.shared] | `shared_ptr` of function type | Yes | 3 |
2873(i) | C++17 | 20.3.2.2 [util.smartptr.shared] | Add `noexcept` to several `shared_ptr` related functions | Yes |  |
2365(i) | C++17 | 20.3.2.2 [util.smartptr.shared] | Missing `noexcept` in `shared_ptr::shared_ptr(nullptr_t)` | Yes |  |
2411(i) | C++17 | 20.3.2.2 [util.smartptr.shared] | `shared_ptr` is only contextually convertible to `bool` | Yes | 0 |
758(i) | C++11 | 20.3.2.2 [util.smartptr.shared] | `shared_ptr` and `nullptr` | Yes |  |
896(i) | C++11 | 20.3.2.2 [util.smartptr.shared] | Library thread safety issue | Yes |  |
541(i) | CD1 | 20.3.2.2 [util.smartptr.shared] | shared_ptr template assignment and void | Yes |  |
674(i) | CD1 | 20.3.2.2 [util.smartptr.shared] | `shared_ptr` interface changes for consistency with N1856 | Yes |  |
710(i) | CD1 | 20.3.2.2 [util.smartptr.shared] | Missing postconditions | Yes |  |
813(i) | CD1 | 20.3.2.2 [util.smartptr.shared] | "empty" undefined for `shared_ptr` | Yes |  |
2810(i) | Resolved | 20.3.2.2 [util.smartptr.shared] | `use_count` and `unique` in `shared_ptr` | Yes |  |
2864(i) | Resolved | 20.3.2.2 [util.smartptr.shared] | Merge `shared_ptr` changes from Library Fundamentals to C++17 | Yes |  |
1406(i) | NAD | 20.3.2.2 [util.smartptr.shared] | Support hashing smart-pointers based on owner | Yes |  |
1031(i) | NAD | 20.3.2.2 [util.smartptr.shared] | Need `shared_ptr` conversion to a `unique_ptr` | Yes |  |
4110(i) | New | 20.3.2.2.2 [util.smartptr.shared.const] | `shared_ptr(nullptr_t, Deleter)` is overconstrained, breaking some sensible deleters | Yes | 3 |
4032(i) | New | 20.3.2.2.2 [util.smartptr.shared.const] | Possibly invalid types in the constraints of constructors of `std::shared_ptr` | Yes | 4 |
2906(i) | New | 20.3.2.2.2 [util.smartptr.shared.const] | There is no ability to supply an allocator for the control block when constructing a `shared_ptr` from a `unique_ptr` | No | 3 |
3548(i) | C++23 | 20.3.2.2.2 [util.smartptr.shared.const] | `shared_ptr` construction from `unique_ptr` should move (not copy) the deleter | Yes |  |
3233(i) | C++20 | 20.3.2.2.2 [util.smartptr.shared.const] | Broken requirements for `shared_ptr` converting constructors | Yes | 0 |
2802(i) | C++17 | 20.3.2.2.2 [util.smartptr.shared.const] | `shared_ptr` constructor requirements for a deleter | Yes | 2 |
2874(i) | C++17 | 20.3.2.2.2 [util.smartptr.shared.const] | Constructor `shared_ptr::shared_ptr(Y*)` should be constrained | Yes |  |
2875(i) | C++17 | 20.3.2.2.2 [util.smartptr.shared.const] | `shared_ptr::shared_ptr(Y*, D, […])` constructors should be constrained | Yes |  |
2876(i) | C++17 | 20.3.2.2.2 [util.smartptr.shared.const] | `shared_ptr::shared_ptr(const weak_ptr<Y>&)` constructor should be constrained | Yes |  |
2399(i) | C++17 | 20.3.2.2.2 [util.smartptr.shared.const] | `shared_ptr`'s constructor from `unique_ptr` should be constrained | Yes | 0 |
2415(i) | C++17 | 20.3.2.2.2 [util.smartptr.shared.const] | Inconsistency between `unique_ptr` and `shared_ptr` | Yes | 2 |
2495(i) | C++17 | 20.3.2.2.2 [util.smartptr.shared.const] | There is no such thing as an Exception Safety element | Yes | 0 |
2685(i) | C++17 | 20.3.2.2.2 [util.smartptr.shared.const] | `shared_ptr` deleters must not not throw on move construction | Yes | 0 |
881(i) | C++11 | 20.3.2.2.2 [util.smartptr.shared.const] | `shared_ptr` conversion issue | Yes |  |
925(i) | C++11 | 20.3.2.2.2 [util.smartptr.shared.const] | `shared_ptr`'s explicit conversion from `unique_ptr` | Yes |  |
687(i) | CD1 | 20.3.2.2.2 [util.smartptr.shared.const] | shared_ptr conversion constructor not constrained | Yes |  |
827(i) | Resolved | 20.3.2.2.2 [util.smartptr.shared.const] | `constexpr shared_ptr::shared_ptr()?` | Yes |  |
1407(i) | Resolved | 20.3.2.2.2 [util.smartptr.shared.const] | Synch `shared_ptr` constructors taking movable types | Yes |  |
2751(i) | New | 20.3.2.2.3 [util.smartptr.shared.dest] | `shared_ptr` deleter not specified to observe expired `weak_ptr` instances | No | 4 |
899(i) | C++11 | 20.3.2.2.3 [util.smartptr.shared.dest] | Adjusting `shared_ptr` for `nullptr_t` | Yes |  |
575(i) | CD1 | 20.3.2.2.3 [util.smartptr.shared.dest] | the specification of ~shared_ptr is MT-unfriendly, makes implementation assumptions | Yes |  |
2907(i) | NAD | 20.3.2.2.3 [util.smartptr.shared.dest] | Semantics for destroying the deleter and the control-block of a `shared_ptr` are unclear | Yes |  |
884(i) | Resolved | 20.3.2.2.5 [util.smartptr.shared.mod] | `shared_ptr` swap | Yes |  |
2434(i) | C++17 | 20.3.2.2.6 [util.smartptr.shared.obs] | `shared_ptr::use_count()` is efficient | Yes | 0 |
2572(i) | C++17 | 20.3.2.2.6 [util.smartptr.shared.obs] | The remarks for `shared_ptr::operator*` should apply to cv-qualified `void` as well | Yes | 0 |
711(i) | C++11 | 20.3.2.2.6 [util.smartptr.shared.obs] | Contradiction in empty `shared_ptr` | Yes |  |
540(i) | CD1 | 20.3.2.2.6 [util.smartptr.shared.obs] | shared_ptr<void>::operator*() | Yes |  |
542(i) | CD1 | 20.3.2.2.6 [util.smartptr.shared.obs] | shared_ptr observers | Yes |  |
2776(i) | Resolved | 20.3.2.2.6 [util.smartptr.shared.obs] | `shared_ptr unique()` and `use_count()` | Yes | 2 |
2337(i) | NAD | 20.3.2.2.6 [util.smartptr.shared.obs] | `shared_ptr operator*()` should not be `noexcept` | Yes | 2 |
3210(i) | New | 20.3.2.2.7 [util.smartptr.shared.create] | `allocate_shared` is inconsistent about removing `const` from the pointer passed to allocator `construct` and `destroy` | Yes | 3 |
3216(i) | WP | 20.3.2.2.7 [util.smartptr.shared.create] | Rebinding the allocator before calling `construct`/`destroy` in `allocate_shared` | Yes | 3 |
4024(i) | WP | 20.3.2.2.7 [util.smartptr.shared.create] | Underspecified destruction of objects created in `std::make_shared_for_overwrite/std::allocate_shared_for_overwrite` | Yes | 2 |
3005(i) | C++20 | 20.3.2.2.7 [util.smartptr.shared.create] | Destruction order of arrays by `make_shared/allocate_shared` only recommended? | Yes | 0 |
3007(i) | C++20 | 20.3.2.2.7 [util.smartptr.shared.create] | `allocate_shared` should rebind allocator to cv-unqualified `value_type` for construction | Yes | 0 |
3008(i) | C++20 | 20.3.2.2.7 [util.smartptr.shared.create] | `make_shared` (sub)object destruction semantics are not specified | Yes | 2 |
2696(i) | C++17 | 20.3.2.2.7 [util.smartptr.shared.create] | Interaction between `make_shared` and `enable_shared_from_this` is underspecified | Yes | 2 |
2070(i) | Resolved | 20.3.2.2.7 [util.smartptr.shared.create] | `allocate_shared` should use `allocator_traits<A>::construct` | Yes | 2 |
3427(i) | C++23 | 20.3.2.2.8 [util.smartptr.shared.cmp] | `operator<=>(const shared_ptr<T>&, nullptr_t)` definition ill-formed | Yes | 0 |
2908(i) | C++17 | 20.3.2.2.8 [util.smartptr.shared.cmp] | The less-than operator for shared pointers could do more | Yes |  |
1262(i) | C++11 | 20.3.2.2.8 [util.smartptr.shared.cmp] | `std::less<std::shared_ptr<T>>` is underspecified | Yes |  |
743(i) | CD1 | 20.3.2.2.9 [util.smartptr.shared.spec] | rvalue `swap` for `shared_ptr` | Yes |  |
2964(i) | C++20 | 20.3.2.2.10 [util.smartptr.shared.cast] | Apparently redundant requirement for `dynamic_pointer_cast` | Yes | 0 |
2877(i) | Resolved | 20.3.2.2.10 [util.smartptr.shared.cast] | Strengthen meaning of "empty `shared_ptr<T>`" in `dynamic_pointer_cast` | Yes |  |
2400(i) | C++17 | 20.3.2.2.11 [util.smartptr.getdeleter] | `shared_ptr`'s `get_deleter()` should use `addressof()` | Yes | 0 |
533(i) | CD1 | 20.3.2.2.11 [util.smartptr.getdeleter] | typo in 2.2.3.10/1 | Yes |  |
545(i) | CD1 | 20.3.2.2.11 [util.smartptr.getdeleter] | When is a deleter deleted? | Yes |  |
741(i) | NAD | 20.3.2.2.11 [util.smartptr.getdeleter] | Const-incorrect `get_deleter` function for `shared_ptr` | Yes |  |
3001(i) | C++20 | 20.3.2.3 [util.smartptr.weak] | `weak_ptr::element_type` needs `remove_extent_t` | Yes | 0 |
2083(i) | C++14 | 20.3.2.3 [util.smartptr.weak] | const-qualification on `weak_ptr::owner_before` | Yes |  |
2315(i) | C++14 | 20.3.2.3 [util.smartptr.weak] | `weak_ptr` should be movable | Yes | 2 |
1256(i) | C++11 | 20.3.2.3 [util.smartptr.weak] | `weak_ptr` comparison functions should be removed | Yes |  |
3195(i) | C++23 | 20.3.2.3.2 [util.smartptr.weak.const] | What is the stored pointer value of an empty `weak_ptr`? | Yes | 2 |
2942(i) | C++20 | 20.3.2.3.6 [util.smartptr.weak.obs] | LWG 2873's resolution missed `weak_ptr::owner_before` | Yes |  |
2316(i) | C++14 | 20.3.2.3.6 [util.smartptr.weak.obs] | `weak_ptr::lock()` should be atomic | Yes | 0 |
1231(i) | C++11 | 20.3.2.3.6 [util.smartptr.weak.obs] | `weak_ptr` comparisons incompletely resolved | Yes |  |
949(i) | C++11 | 20.3.2.4 [util.smartptr.ownerless] | `owner_less` | Yes |  |
2529(i) | Resolved | 20.3.2.7 [util.smartptr.enab] | Assigning to `enable_shared_from_this::__weak_this` twice | Yes | 3 |
2179(i) | Resolved | 20.3.2.7 [util.smartptr.enab] | `enable_shared_from_this` and construction from raw pointers | Yes | 3 |
3734(i) | C++23 | 20.3.4.1 [out.ptr.t] | Inconsistency in `inout_ptr` and `out_ptr` for empty case | Yes | 2 |
3897(i) | WP | 20.3.4.3 [inout.ptr.t] | `inout_ptr` will not update raw pointer to 0 | Yes | 2 |
3594(i) | C++23 | 20.3.4.3 [inout.ptr.t] | `inout_ptr` — inconsistent `release()` in destructor | Yes | 1 |
4322(i) | New | 20.4 [mem.composite.types] | Problematic Constraints on incomplete types in indirect and polymorphic | Yes | 2 |
4250(i) | LEWG | 20.4.1.7 [indirect.swap] | `swap` overloads for `indirect` and `polymorphic` only found by ADL | Yes | 2 |
4325(i) | New | 20.4.1.8 [indirect.relops] | `std::indirect`'s `operator==` still does not support incomplete types | Yes | 2 |
3471(i) | C++23 | 20.5 [mem.res] | `polymorphic_allocator::allocate` does not satisfy Cpp17Allocator requirements | Yes | 3 |
2700(i) | NAD | 20.5 [mem.res] | `resource_adaptor` went missing | Yes | 1 |
3681(i) | New | 20.5.1 [mem.res.syn] | Further considerations on LWG 3679 (using `pmr::vector` without including `<memory_resource>`) | No | 4 |
3637(i) | New | 20.5.2 [mem.res.class] | `pmr::memory_resource::do_allocate` needs clarification | No | 3 |
2724(i) | C++17 | 20.5.2 [mem.res.class] | The protected virtual member functions of `memory_resource` should be private | Yes | 4 |
2843(i) | C++20 | 20.5.2.3 [mem.res.private] | Unclear behavior of `std::pmr::memory_resource::do_allocate()` | Yes | 3 |
2701(i) | NAD Editorial | 20.5.2.3 [mem.res.private] | Unclear requirement in [memory.resource.private] | Yes | 3 |
3036(i) | C++23 | 20.5.3 [mem.poly.allocator.class] | `polymorphic_allocator::destroy` is extraneous | Yes | 3 |
3683(i) | C++23 | 20.5.3 [mem.poly.allocator.class] | `operator==` for `polymorphic_allocator` cannot deduce template argument in common cases | Yes |  |
3037(i) | C++20 | 20.5.3 [mem.poly.allocator.class] | `polymorphic_allocator` and incomplete types | Yes | 2 |
3304(i) | C++20 | 20.5.3 [mem.poly.allocator.class] | Allocate functions of `std::polymorphic_allocator` should require `[[nodiscard]]` | Yes | 3 |
3312(i) | Dup | 20.5.3 [mem.poly.allocator.class] | `polymorphic_allocator::allocate_object` and `new_object` should be `[[nodiscard]]` | Yes |  |
4311(i) | New | 20.5.3.3 [mem.poly.allocator.mem] | Can `std::pmr::polymorphic_allocator::construct` just call `std::uninitialized_construct_using_allocator`? | Yes | 3 |
2969(i) | C++20 | 20.5.3.3 [mem.poly.allocator.mem] | `polymorphic_allocator::construct()` shouldn't pass `resource()` | Yes | 2 |
2975(i) | C++20 | 20.5.3.3 [mem.poly.allocator.mem] | Missing case for `pair` construction in scoped and polymorphic allocators | Yes | 3 |
3038(i) | C++20 | 20.5.3.3 [mem.poly.allocator.mem] | `polymorphic_allocator::allocate` should not allow integer overflow to create vulnerabilities | Yes | 2 |
3237(i) | C++20 | 20.5.3.3 [mem.poly.allocator.mem] | LWG 3038 and 3190 have inconsistent PRs | Yes | 2 |
3310(i) | C++20 | 20.5.3.3 [mem.poly.allocator.mem] | Replace `SIZE_MAX` with `numeric_limits<size_t>::max()` | Yes | 0 |
3113(i) | Resolved | 20.5.3.3 [mem.poly.allocator.mem] | `polymorphic_allocator::construct()` should more closely match `scoped_allocator_adaptor::construct()` | Yes | 3 |
3634(i) | New | 20.5.4 [mem.res.global] | When are static-duration `memory_resource` objects destroyed? | No | 3 |
2961(i) | C++20 | 20.5.4 [mem.res.global] | Bad postcondition for `set_default_resource` | Yes |  |
2848(i) | New | 20.5.5.2 [mem.res.pool.options] | Pass-through threshold for pool allocator | No | 3 |
3143(i) | C++23 | 20.5.6 [mem.res.monotonic.buffer] | `monotonic_buffer_resource` growth policy is unclear | Yes | 2 |
3120(i) | C++23 | 20.5.6.3 [mem.res.monotonic.buffer.mem] | Unclear behavior of `monotonic_buffer_resource::release()` | Yes | 2 |
3000(i) | C++20 | 20.5.6.3 [mem.res.monotonic.buffer.mem] | `monotonic_memory_resource::do_is_equal` uses `dynamic_cast` unnecessarily | Yes | 0 |
1316(i) | C++11 | 20.6 [allocator.adaptor] | `scoped_allocator_adaptor operator==` has no definition | Yes |  |
1405(i) | Resolved | 20.6 [allocator.adaptor] | Move `scoped_allocator_adaptor` into separate header | Yes |  |
2476(i) | C++17 | 20.6.1 [allocator.adaptor.syn] | `scoped_allocator_adaptor` is not assignable | Yes | 0 |
2782(i) | C++17 | 20.6.3 [allocator.adaptor.cnstr] | `scoped_allocator_adaptor` constructors must be constrained | Yes | 0 |
3116(i) | C++20 | 20.6.4 [allocator.adaptor.members] | `OUTERMOST_ALLOC_TRAITS` needs `remove_reference_t` | Yes | 0 |
2586(i) | C++17 | 20.6.4 [allocator.adaptor.members] | Wrong value category used in `scoped_allocator_adaptor::construct()` | Yes | 0 |
2203(i) | C++14 | 20.6.4 [allocator.adaptor.members] | `scoped_allocator_adaptor` uses wrong argument types for piecewise construction | Yes |  |
2511(i) | Resolved | 20.6.4 [allocator.adaptor.members] | `scoped_allocator_adaptor` piecewise construction does not require `CopyConstructible` | Yes | 3 |
1321(i) | Resolved | 20.6.4 [allocator.adaptor.members] | `scoped_allocator_adaptor construct` and `destroy` don't use `allocator_traits` | Yes |  |
2717(i) | NAD | 20.6.4 [allocator.adaptor.members] | `scoped_allocator_adaptor` uses `forward` to do `move`'s job | Yes |  |

## Section 21 (124 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2290(i) | Open | 21 [meta] | Top-level "SFINAE"-based constraints should get a separate definition in Clause 17 | Yes | 3 |
2452(i) | Core | 21 [meta] | `is_constructible`, etc. and default arguments | No | 3 |
2582(i) | C++17 | 21 [meta] | §[res.on.functions]/2's prohibition against incomplete types shouldn't apply to type traits | Yes | 0 |
1114(i) | C++11 | 21 [meta] | Type traits underspecified | Yes |  |
2040(i) | Resolved | 21 [meta] | Missing type traits related to `is_convertible` | Yes |  |
719(i) | Resolved | 21 [meta] | `std::is_literal` type traits should be provided | Yes |  | 750
1390(i) | Resolved | 21 [meta] | Limit speculative compilation for constructible/convertible traits | Yes |  |
1391(i) | Resolved | 21 [meta] | constructible/convertible traits and access control | Yes |  |
590(i) | NAD Editorial | 21 [meta] | Type traits implementation latitude should be removed for C++0x | Yes |  |
3930(i) | NAD | 21 [meta] | Simplify type trait wording | Yes |  |
1120(i) | NAD | 21 [meta] | New type trait - `remove_all` | Yes |  |
1018(i) | NAD Concepts | 21 [meta] | Trait specifications should be expressed in terms of concepts | Yes |  |
2314(i) | C++14 | 21.2.1 [intseq.general] | `apply()` should return `decltype(auto)` and use `decay_t` before `tuple_size` | Yes | 0 |
2345(i) | NAD | 21.2.2 [intseq.intseq] | `integer_sequence` should have a self-typedef `::type` | Yes | 2 |
2845(i) | New | 21.3.2 [meta.rqmts] | `enable_if`, `result_of`, `common_type` and `aligned_storage` do not meet the definition of `TransformationTrait` | No | 3 |
2514(i) | C++17 | 21.3.2 [meta.rqmts] | Type traits must not be `final` | Yes | 3 |
3099(i) | Open | 21.3.3 [meta.type.synop] | `is_assignable<Incomplete&, Incomplete&>` | Yes | 2 |
2939(i) | Open | 21.3.3 [meta.type.synop] | Some type-completeness constraints of traits are overspecified | Yes | 2 |
2581(i) | C++17 | 21.3.3 [meta.type.synop] | Specialization of `<type_traits>` variable templates should be prohibited | Yes | 0 |
2922(i) | Resolved | 21.3.3 [meta.type.synop] | The `*_constant<>` templates do not make use of `template<auto>` | Yes |  |
2928(i) | Resolved | 21.3.3 [meta.type.synop] | `is_callable` is not a good name | Yes |  |
2797(i) | Resolved | 21.3.3 [meta.type.synop] | Trait precondition violations | Yes | 2 |
2927(i) | Resolved | 21.3.3 [meta.type.synop] | Encoding a functor and argument types as a function signature for `is_callable` and `result_of` is fragile | Yes |  |
2871(i) | NAD | 21.3.3 [meta.type.synop] | User specializations of type traits should be ill-formed | Yes |  |
2910(i) | Dup | 21.3.3 [meta.type.synop] | Template deduction and `integral_constant` | Yes |  |
2346(i) | C++14 | 21.3.4 [meta.help] | `integral_constant`'s member functions should be marked `noexcept` | Yes | 0 |
1019(i) | C++11 | 21.3.4 [meta.help] | Make `integral_constant` objects useable in integral-constant-expressions | Yes |  |
1202(i) | NAD | 21.3.4 [meta.help] | `integral_constant` needs a spring clean | Yes |  |
1092(i) | NAD Concepts | 21.3.4 [meta.help] | Class template `integral_constant` should be a constrained template | Yes |  |
4383(i) | New | 21.3.5 [const.wrap.class] | `constant_wrapper`'s pseudo-mutators are underconstrained | Yes | 1 |
2015(i) | C++14 | 21.3.6 [meta.unary] | Incorrect pre-conditions for some type traits | Yes |  |
525(i) | Resolved | 21.3.6 [meta.unary] | type traits definitions not clear | Yes |  |
1392(i) | Resolved | 21.3.6 [meta.unary] | `result_of` should support pointer-to-data-member | Yes |  |
2247(i) | C++14 | 21.3.6.2 [meta.unary.cat] | Type traits and `std::nullptr_t` | Yes |  |
3967(i) | New | 21.3.6.4 [meta.unary.prop] | The specification for `std::is_nothrow_*` traits may be ambiguous in some cases involving `noexcept(false)` | Yes | 3 |
3929(i) | New | 21.3.6.4 [meta.unary.prop] | Preconditions for type traits should be Mandates | Yes | 3 |
2827(i) | New | 21.3.6.4 [meta.unary.prop] | `is_trivially_constructible` and non-trivial destructors | No | 3 |
3697(i) | New | 21.3.6.4 [meta.unary.prop] | Preconditions of `reference_constructs_from_temporary/reference_converts_from_temporary` seem wrong | Yes | 3 |
2496(i) | New | 21.3.6.4 [meta.unary.prop] | Certain hard-to-avoid errors not in the immediate context are not allowed to be triggered by the evaluation of type traits | No | 3 |
2116(i) | Open | 21.3.6.4 [meta.unary.prop] | `is_nothrow_constructible` and destructors | No | 3 |
2358(i) | Open | 21.3.6.4 [meta.unary.prop] | Apparently-bogus definition of `is_empty` type trait | Yes | 3 |
2077(i) | Open | 21.3.6.4 [meta.unary.prop] | Further incomplete constraints for type traits | No | 3 |
3486(i) | LEWG | 21.3.6.4 [meta.unary.prop] | `is_constructible<T[], T...>` may be misleading in C++20 | No | 4 |
4113(i) | WP | 21.3.6.4 [meta.unary.prop] | Disallow `has_unique_object_representations<Incomplete[]>` | Yes |  |
3819(i) | C++23 | 21.3.6.4 [meta.unary.prop] | `reference_meows_from_temporary` should not use `is_meowible` | Yes |  |
3823(i) | C++23 | 21.3.6.4 [meta.unary.prop] | Unnecessary precondition for `is_aggregate` | Yes |  |
2972(i) | C++20 | 21.3.6.4 [meta.unary.prop] | What is `is_trivially_destructible_v<int>`? | Yes |  |
3354(i) | C++20 | 21.3.6.4 [meta.unary.prop] | `has_strong_structural_equality` has a meaningless definition | Yes | 1 |
2911(i) | C++17 | 21.3.6.4 [meta.unary.prop] | An `is_aggregate` type trait is needed | Yes |  |
2336(i) | C++17 | 21.3.6.4 [meta.unary.prop] | `is_trivially_constructible/is_trivially_assignable` traits are always false | Yes | 3 |
2367(i) | C++17 | 21.3.6.4 [meta.unary.prop] | `pair` and `tuple` are not correctly implemented for `is_constructible` with no args | Yes | 3 |
2560(i) | C++17 | 21.3.6.4 [meta.unary.prop] | `is_constructible` underspecified when applied to a function type | Yes | 0 |
2738(i) | C++17 | 21.3.6.4 [meta.unary.prop] | `is_constructible` with `void` types | Yes |  |
2049(i) | C++14 | 21.3.6.4 [meta.unary.prop] | `is_destructible` is underspecified | Yes |  |
2196(i) | C++14 | 21.3.6.4 [meta.unary.prop] | Specification of `is_*[copy/move]_[constructible/assignable]` unclear for non-referencable types | Yes |  |
2197(i) | C++14 | 21.3.6.4 [meta.unary.prop] | Specification of `is_[un]signed` unclear for non-arithmetic types | Yes |  |
2298(i) | C++14 | 21.3.6.4 [meta.unary.prop] | [CD] `is_nothrow_constructible` is always false because of `create<>` | Yes |  |
931(i) | C++11 | 21.3.6.4 [meta.unary.prop] | type trait `extent<T, I>` | Yes |  |
1131(i) | C++11 | 21.3.6.4 [meta.unary.prop] | C++0x does not need `alignment_of` | Yes |  |
749(i) | CD1 | 21.3.6.4 [meta.unary.prop] | Currently `has_nothrow_copy_constructor<T>::value` is true if `T` has 'a' nothrow copy constructor. | Yes |  |
1174(i) | Resolved | 21.3.6.4 [meta.unary.prop] | Type property predicates | Yes |  |
1260(i) | Resolved | 21.3.6.4 [meta.unary.prop] | `is_constructible<int*,void*>` reports true | Yes |  |
1393(i) | Resolved | 21.3.6.4 [meta.unary.prop] | Trivial traits imply `noexcept` | Yes |  |
1394(i) | Resolved | 21.3.6.4 [meta.unary.prop] | `is_constructible` reports false positives | Yes |  |
2828(i) | NAD Editorial | 21.3.6.4 [meta.unary.prop] | Clarify `<cstdalign>` (following adoption of P0063r3) | Yes |  |
1239(i) | NAD Editorial | 21.3.6.4 [meta.unary.prop] | Defect report | Yes |  |
747(i) | NAD | 21.3.6.4 [meta.unary.prop] | We have 3 separate type traits to identify classes supporting no-throw operations | Yes |  |
748(i) | NAD | 21.3.6.4 [meta.unary.prop] | The is_abstract type trait is defined by reference to 10.4. | Yes |  |
1228(i) | NAD | 21.3.6.4 [meta.unary.prop] | User-specialized nothrow type traits | Yes |  |
2317(i) | C++14 | 21.3.7 [meta.unary.prop.query] | The type property queries should be `UnaryTypeTraits` returning `size_t` | Yes | 0 |
4028(i) | New | 21.3.8 [meta.rel] | `std::is_(nothrow_)convertible` should be reworded to avoid dependence on the `return` statement | Yes | 2 |
3400(i) | New | 21.3.8 [meta.rel] | Does `is_nothrow_convertible` consider destruction of the destination type? | No | 3 |
3174(i) | New | 21.3.8 [meta.rel] | Precondition on `is_convertible` is too strong | Yes | 3 |
975(i) | C++11 | 21.3.8 [meta.rel] | `is_convertible` cannot be instantiated for non-convertible types | Yes |  |
2895(i) | Resolved | 21.3.8 [meta.rel] | Passing function types to `result_of` and `is_callable` | Yes |  |
3022(i) | Resolved | 21.3.8 [meta.rel] | `is_convertible<derived*, base*>` may lead to ODR | Yes | 2 |
1395(i) | NAD Editorial | 21.3.8 [meta.rel] | Inconsistent reference links should be unified | Yes |  |
750(i) | Dup | 21.3.8 [meta.rel] | The current definition for `is_convertible` requires that the type be implicitly convertible, so explicit constructors are ignored. | Yes |  | 719
2101(i) | C++17 | 21.3.9 [meta.trans] | Some transformation types can produce impossible types | Yes | 3 |
3205(i) | New | 21.3.9.7 [meta.trans.other] | `decay_t` in the new `common_type` fallback should be `remove_cvref_t` | Yes | 3 |
3152(i) | C++23 | 21.3.9.7 [meta.trans.other] | `common_type` and `common_reference` have flaws in common | Yes | 3 |
2979(i) | C++20 | 21.3.9.7 [meta.trans.other] | `aligned_union` should require complete object types | Yes | 0 |
3034(i) | C++20 | 21.3.9.7 [meta.trans.other] | P0767R1 breaks previously-standard-layout types | Yes | 0 |
3140(i) | C++20 | 21.3.9.7 [meta.trans.other] | `COMMON_REF` is unimplementable as specified | Yes | 0 |
3380(i) | C++20 | 21.3.9.7 [meta.trans.other] | `common_type` and comparison categories | Yes | 0 |
2396(i) | C++17 | 21.3.9.7 [meta.trans.other] | `underlying_type` doesn't say what to do for an incomplete enumeration type | Yes | 0 |
2408(i) | C++17 | 21.3.9.7 [meta.trans.other] | SFINAE-friendly `common_type/iterator_traits` is missing in C++14 | Yes |  |
2460(i) | C++17 | 21.3.9.7 [meta.trans.other] | LWG issue 2408 and value categories | Yes | 2 |
2141(i) | C++14 | 21.3.9.7 [meta.trans.other] | `common_type` trait produces reference types | Yes |  |
1187(i) | C++11 | 21.3.9.7 [meta.trans.other] | `std::decay` | Yes |  |
705(i) | CD1 | 21.3.9.7 [meta.trans.other] | type-trait `decay` incompletely specified | Yes |  |
856(i) | CD1 | 21.3.9.7 [meta.trans.other] | Removal of `aligned_union` | Yes |  |
2465(i) | Resolved | 21.3.9.7 [meta.trans.other] | SFINAE-friendly `common_type` is nearly impossible to specialize correctly and regresses key functionality | Yes | 2 |
2763(i) | Resolved | 21.3.9.7 [meta.trans.other] | `common_type_t<void, void>` is undefined | Yes | 2 |
1055(i) | Resolved | 21.3.9.7 [meta.trans.other] | Provide a trait that returns the underlying type of an enumeration type | Yes |  |
2397(i) | Resolved | 21.3.9.7 [meta.trans.other] | `map<K, V>::emplace` and explicit `V` constructors | Yes | 1 |
849(i) | NAD | 21.3.9.7 [meta.trans.other] | missing type traits to compute root class and derived class of types in a class hierachy | Yes |  |
1020(i) | NAD | 21.3.9.7 [meta.trans.other] | Restore `aligned_union` | Yes |  |
2569(i) | C++17 | 21.3.10 [meta.logical] | `conjunction` and `disjunction` requirements are too strict | Yes | 2 |
2587(i) | C++17 | 21.3.10 [meta.logical] | "Convertible to `bool`" requirement in `conjunction` and `disjunction` | Yes | 3 |
2557(i) | C++17 | 21.3.10 [meta.logical] | Logical operator traits are broken in the zero-argument case | Yes | 0 |
2567(i) | C++17 | 21.3.10 [meta.logical] | Specification of logical operator traits uses `BaseCharacteristic`, which is defined only for `UnaryTypeTraits` and `BinaryTypeTraits` | Yes | 2 |
4138(i) | New | 21.3.12 [meta.const.eval] | `is_within_lifetime` should mandate `is_object` | Yes | 3 |
4416(i) | Tentatively Ready | 21.4.1 [meta.syn] | `<meta>` should include `<compare>` | Yes |  |
4435(i) | New | 21.4.6 [meta.reflection.names] | `meta::has_identifier` doesn't handle all types | Yes | 2 |
4433(i) | New | 21.4.7 [meta.reflection.queries] | Incorrect query for C language linkage | Yes |  |
4427(i) | New | 21.4.7 [meta.reflection.queries] | `meta::dealias` needs to work with things that aren't entities | Yes |  |
4422(i) | Tentatively Ready | 21.4.8 [meta.reflection.access.context] | `meta::access_context` should be a consteval-only type | Yes | 2 |
4428(i) | New | 21.4.9 [meta.reflection.access.queries] | Metafunctions should not be defined in terms of constant subexpressions | Yes |  |
4434(i) | New | 21.4.9 [meta.reflection.access.queries] | `meta::is_accessible` does not need to consider incomplete D | Yes |  |
4429(i) | New | 21.4.11 [meta.reflection.layout] | `meta::alignment_of` should exclude data member description of bit-field | Yes |  |
4298(i) | New | 21.4.12 [meta.reflection.extract] | §[meta.reflection.extract] Malformed "`F noexcept`" type | Yes | 3 |
4316(i) | New | 21.4.13 [meta.reflection.substitute] | `{can_}substitute` specification is ill-formed | Yes | 1 |
4426(i) | Tentatively Ready | 21.4.15 [meta.reflection.array] | Clarify what `meta::reflect_constant_string` considers a string literal | Yes |  |
4432(i) | New | 21.4.15 [meta.reflection.array] | Clarify element initialization for `meta::reflect_constant_array` | Yes |  |
4423(i) | Ready | 21.4.16 [meta.reflection.define.aggregate] | `meta::data_member_spec` allows negative bit-field widths | Yes |  |
4424(i) | New | 21.4.16 [meta.reflection.define.aggregate] | `meta::define_aggregate` should require a class type | Yes | 1 |
921(i) | C++11 | 21.5.3 [ratio.ratio] | Rational Arithmetic should use template aliases | Yes |  |
1388(i) | C++11 | 21.5.3 [ratio.ratio] | LWG 1281 incorrectly accepted | Yes |  |
1122(i) | Resolved | 21.5.3 [ratio.ratio] | Ratio values should be `constexpr` | Yes |  |
1281(i) | Resolved | 21.5.3 [ratio.ratio] | CopyConstruction and Assignment between ratios having the same normalized form | Yes |  |
948(i) | C++11 | 21.5.4 [ratio.arithmetic] | `ratio` arithmetic tweak | Yes |  |
1389(i) | Resolved | 21.5.4 [ratio.arithmetic] | Compile-time rational arithmetic and overflow | Yes |  |
1121(i) | NAD | 21.5.4 [ratio.arithmetic] | Support for multiple arguments | Yes |  |

## Section 22 (350 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
312(i) | CD1 | 22 [utilities] | Table 27 is missing headers | Yes |  |
2888(i) | Resolved | 22 [utilities] | Variables of library tag types need to be inline variables | Yes |  |
2889(i) | Resolved | 22 [utilities] | Mark `constexpr` global variables as `inline` | Yes |  |
1075(i) | Resolved | 22 [utilities] | Scoped allocators are too complex | Yes |  |
2893(i) | NAD | 22 [utilities] | Parsing Hexadecimally in P0067R4 | Yes |  |
2212(i) | C++17 | 22.2 [utility] | `tuple_size` for `const pair` request `<tuple>` header | Yes | 3 |
1255(i) | C++11 | 22.2 [utility] | `declval` should be added to the library | Yes |  |
2955(i) | Resolved | 22.2 [utility] | `to_chars` / `from_chars` depend on `std::string` | Yes |  |
2456(i) | Resolved | 22.2 [utility] | Incorrect exception specifications for '`swap`' throughout library | Yes | 1 |
1377(i) | Resolved | 22.2 [utility] | The revised `forward` is not compatible with access-control | Yes |  |
1289(i) | NAD | 22.2 [utility] | Generic casting requirements for smart pointers | Yes |  |
1373(i) | NAD | 22.2 [utility] | Customizable traits should have their own headers | Yes |  |
2153(i) | LEWG | 22.2.2 [utility.swap] | Narrowing of the non-member `swap` contract | No | 2 |
2554(i) | Resolved | 22.2.2 [utility.swap] | Swapping multidimensional arrays is never `noexcept` | Yes | 2 |
2800(i) | Resolved | 22.2.2 [utility.swap] | `constexpr swap` | Yes | 3 |
4056(i) | NAD | 22.2.2 [utility.swap] | The effects of `std::swap` are under-specified | Yes |  |
2297(i) | NAD | 22.2.3 [utility.exchange] | [CD] Missing type requirements for `std::exchange` | Yes |  |
2388(i) | NAD | 22.2.3 [utility.exchange] | Handling self-assignment in the proposed library function `std::exchange` | Yes | 2 |
3757(i) | C++23 | 22.2.4 [forward] | What's the effect of `std::forward_like<void>(x)`? | Yes |  |
939(i) | C++11 | 22.2.4 [forward] | Problem with `std::identity` and reference-to-temporaries | Yes |  |
808(i) | CD1 | 22.2.4 [forward] | §[forward] incorrect redundant specification | Yes |  |
700(i) | CD1 | 22.2.4 [forward] | N1856 defines struct `identity` | Yes |  |
823(i) | Resolved | 22.2.4 [forward] | `identity<void>` seems broken | Yes |  |
1054(i) | Resolved | 22.2.4 [forward] | `forward` broken | Yes |  |
3902(i) | New | 22.2.6 [declval] | Return type of `std::declval<cv void>` should be (cv-unqualified) `void` | Yes | 4 |
2599(i) | New | 22.2.6 [declval] | Library incomplete type permission phrase is unclear | No | 3 |
296(i) | C++11 | 22.3 [pairs] | Missing descriptions and requirements of pair operators | Yes |  |
811(i) | C++11 | 22.3 [pairs] | `pair` of pointers no longer works with literal 0 | Yes |  |
885(i) | C++11 | 22.3 [pairs] | `pair` assignment | Yes |  |
265(i) | CD1 | 22.3 [pairs] | std::pair::pair() effects overly restrictive | Yes |  |
706(i) | CD1 | 22.3 [pairs] | `make_pair()` should behave as `make_tuple()` wrt. `reference_wrapper()` | Yes |  |
181(i) | TC1 | 22.3 [pairs] | make_pair() unintended behavior | Yes |  |
353(i) | Resolved | 22.3 [pairs] | `std::pair` missing template assignment | Yes |  |
482(i) | Resolved | 22.3 [pairs] | Swapping pairs | Yes |  |
1378(i) | Resolved | 22.3 [pairs] | `pair` and `tuple` have too many conversions | Yes |  |
1380(i) | Resolved | 22.3 [pairs] | `pair` and `tuple` of references need to better specify move-semantics | Yes |  |
1382(i) | Resolved | 22.3 [pairs] | `pair` and `tuple` constructors should `forward` arguments | Yes |  |
1383(i) | Resolved | 22.3 [pairs] | Inconsistent defaulted move/copy members in `pair` and `tuple` | Yes |  |
840(i) | NAD | 22.3 [pairs] | `pair` default template argument | Yes |  |
916(i) | NAD | 22.3 [pairs] | Redundant move-assignment operator of `pair` should be removed | Yes |  |
348(i) | Dup | 22.3 [pairs] | Minor issue with std::pair operator< | Yes |  | 532
1167(i) | NAD Concepts | 22.3 [pairs] | `pair<T,U>` doesn't model `LessThanComparable` in unconstrained code even if `T` and `U` do. | Yes |  |
3342(i) | New | 22.3.2 [pairs.pair] | Library wording uses "initializes `x` with `y`", which is underspecified | No | 3 |
2289(i) | Open | 22.3.2 [pairs.pair] | `constexpr` guarantees of defaulted functions still insufficient | No | 3 |
2958(i) | C++20 | 22.3.2 [pairs.pair] | Moves improperly defined as deleted | Yes | 2 |
3346(i) | C++20 | 22.3.2 [pairs.pair] | `pair` and `tuple` copy and move constructor have backwards specification | Yes | 0 |
3382(i) | C++20 | 22.3.2 [pairs.pair] | NTTP for `pair` and `array` | Yes | 2 |
2729(i) | C++17 | 22.3.2 [pairs.pair] | Missing SFINAE on `std::pair::operator=` | Yes | 2 |
1324(i) | Resolved | 22.3.2 [pairs.pair] | Still too many implicit conversions for `pair` and `tuple` | Yes |  |
1326(i) | Resolved | 22.3.2 [pairs.pair] | Missing/wrong preconditions for `pair` and `tuple` functions | Yes |  |
1379(i) | Resolved | 22.3.2 [pairs.pair] | `pair` copy-assignment not consistent for references | Yes |  |
2068(i) | NAD | 22.3.2 [pairs.pair] | `std::pair` not C++03-compatible with defaulted copy c'tor | Yes |  |
2766(i) | New | 22.3.3 [pairs.spec] | Swapping non-swappable types | Yes | 3 |
3865(i) | C++23 | 22.3.3 [pairs.spec] | Sorting a range of `pair`s | Yes | 2 |
3347(i) | C++20 | 22.3.3 [pairs.spec] | `std::pair<T, U>` now requires `T` and `U` to be less-than-comparable | Yes | 1 |
3166(i) | New | 22.3.4 [pair.astuple] | No such descriptive element as Value: | No | 3 |
2974(i) | C++20 | 22.3.4 [pair.astuple] | Diagnose out of bounds `tuple_element`/`variant_alternative` | Yes |  |
1061(i) | NAD Editorial | 22.3.4 [pair.astuple] | Bad indexing for tuple access to pair (Editorial?) | Yes |  |
2899(i) | C++20 | 22.4 [tuple] | `is_(nothrow_)move_constructible` and `tuple`, `optional` and `unique_ptr` | Yes | 2 |
522(i) | CD1 | 22.4 [tuple] | Tuple doesn't define swap | Yes |  |
801(i) | Resolved | 22.4 [tuple] | `tuple` and `pair` trivial members | Yes |  |
2773(i) | C++17 | 22.4.1 [tuple.general] | Making `std::ignore constexpr` | Yes | 0 |
2796(i) | C++17 | 22.4.1 [tuple.general] | `tuple` should be a literal type | Yes | 2 |
2446(i) | NAD | 22.4.1 [tuple.general] | Unspecialized `std::tuple_size` should be defined | Yes |  |
3378(i) | New | 22.4.2 [tuple.syn] | `tuple_size_v/tuple_element_t` should be available when `tuple_size/tuple_element` are | Yes | 3 |
3990(i) | WP | 22.4.4 [tuple.tuple] | Program-defined specializations of `std::tuple` and `std::variant` can't be properly supported | Yes |  |
1116(i) | Resolved | 22.4.4 [tuple.tuple] | Literal constructors for tuple | Yes |  |
2051(i) | Resolved | 22.4.4 [tuple.tuple] | Explicit `tuple` constructors for more than one parameter | Yes | 2 |
1077(i) | NAD Editorial | 22.4.4 [tuple.tuple] | Nonesense `tuple` declarations | Yes |  |
4267(i) | New | 22.4.4.2 [tuple.cnstr] | Uses-allocator construction is meaningless for tuple of references | Yes | 3 |
4313(i) | New | 22.4.4.2 [tuple.cnstr] | Uses-allocator construction of `pair` in `tuple`'s `allocator_arg_t` constructors | Yes | 3 |
3583(i) | New | 22.4.4.2 [tuple.cnstr] | Clarify if/when short circuiting applies to conditions in Constraints: elements | No | 3 |
2528(i) | New | 22.4.4.2 [tuple.cnstr] | Order of `std::tuple` construction unspecified | No | 3 |
4045(i) | WP | 22.4.4.2 [tuple.cnstr] | `tuple` can create dangling references from `tuple-like` | Yes |  |
3121(i) | C++23 | 22.4.4.2 [tuple.cnstr] | `tuple` constructor constraints for `UTypes&&...` overloads | Yes | 2 |
3211(i) | C++23 | 22.4.4.2 [tuple.cnstr] | `std::tuple<>` should be trivially constructible | Yes | 3 |
3158(i) | C++20 | 22.4.4.2 [tuple.cnstr] | `tuple(allocator_arg_t, const Alloc&)` should be conditionally explicit | Yes | 3 |
2312(i) | C++17 | 22.4.4.2 [tuple.cnstr] | `tuple`'s constructor constraints need to be phrased more precisely | Yes | 2 |
2549(i) | C++17 | 22.4.4.2 [tuple.cnstr] | Tuple EXPLICIT constructor templates that take `tuple` parameters end up taking references to temporaries and will create dangling references | Yes | 2 |
886(i) | C++11 | 22.4.4.2 [tuple.cnstr] | `tuple` construction | Yes |  |
807(i) | CD1 | 22.4.4.2 [tuple.cnstr] | `tuple` construction should not fail unless its element's construction fails | Yes |  |
3155(i) | Resolved | 22.4.4.2 [tuple.cnstr] | `tuple<any, any>{allocator_arg_t, an_allocator}` | Yes | 3 |
2419(i) | Resolved | 22.4.4.2 [tuple.cnstr] | Clang's libc++ extension to `std::tuple` | Yes |  |
1117(i) | Resolved | 22.4.4.2 [tuple.cnstr] | `tuple` copy constructor | Yes |  |
3440(i) | NAD | 22.4.4.2 [tuple.cnstr] | Aggregate-paren-init breaks direct-initializing a `tuple` or `optional` from `{aggregate-member-value}` | Yes | 2 |
917(i) | NAD | 22.4.4.2 [tuple.cnstr] | Redundant move-assignment operator of `tuple` should be removed | Yes |  |
918(i) | NAD Concepts | 22.4.4.4 [tuple.swap] | Swap for tuple needs to be conceptualized | Yes |  |
2275(i) | C++14 | 22.4.5 [tuple.creation] | [CD] Why is `forward_as_tuple` not `constexpr`? | Yes |  |
2301(i) | C++14 | 22.4.5 [tuple.creation] | Why is `std::tie` not `constexpr`? | Yes | 2 |
1384(i) | C++11 | 22.4.5 [tuple.creation] | Function `pack_arguments` is poorly named | Yes |  |
1385(i) | C++11 | 22.4.5 [tuple.creation] | `tuple_cat` should be a single variadic signature | Yes |  |
1386(i) | C++11 | 22.4.5 [tuple.creation] | `pack_arguments` overly complex | Yes |  |
2933(i) | Resolved | 22.4.5 [tuple.creation] | PR for LWG 2773 could be clearer | Yes | 3 |
3978(i) | Resolved | 22.4.5 [tuple.creation] | The "no effect" requirement for `std::ignore` is unimplementable for `volatile` bit-fields | Yes | 4 |
1201(i) | Resolved | 22.4.5 [tuple.creation] | Do we always want to unwrap `ref`-wrappers in `make_tuple` | Yes |  |
3528(i) | C++23 | 22.4.6 [tuple.apply] | `make_from_tuple` can perform (the equivalent of) a C-style cast | Yes | 3 |
4040(i) | New | 22.4.7 [tuple.helper] | Contradictory specification of `std::tuple_size` | No | 3 |
2770(i) | C++17 | 22.4.7 [tuple.helper] | `tuple_size<const T>` specialization is not SFINAE compatible and breaks decomposition declarations | Yes | 1 |
2313(i) | C++14 | 22.4.7 [tuple.helper] | `tuple_size` should always derive from `integral_constant<size_t, N>` | Yes | 2 |
1118(i) | C++11 | 22.4.7 [tuple.helper] | `tuple` query APIs do not support cv-qualification | Yes |  |
775(i) | CD1 | 22.4.7 [tuple.helper] | Tuple indexing should be unsigned? | Yes |  |
1119(i) | NAD | 22.4.7 [tuple.helper] | tuple query APIs do not support references | Yes |  |
2485(i) | C++17 | 22.4.8 [tuple.elem] | `get()` should be overloaded for `const tuple&&` | Yes | 1 |
1191(i) | C++11 | 22.4.8 [tuple.elem] | `tuple get` API should respect rvalues | Yes |  |
3882(i) | New | 22.4.9 [tuple.rel] | `tuple` relational operators have confused friendships | Yes | 3 |
3728(i) | New | 22.4.9 [tuple.rel] | Can't make neither head nor tail of the description of `operator<=>(tuple, tuple)` | Yes | 4 |
2472(i) | New | 22.4.9 [tuple.rel] | Heterogeneous comparisons in the standard library can result in ambiguities | No | 3 |
1335(i) | C++11 | 22.4.9 [tuple.rel] | Insufficient requirements for `tuple::operator<()` | Yes |  |
532(i) | NAD | 22.4.9 [tuple.rel] | Tuple comparison | Yes |  | 348
928(i) | NAD Concepts | 22.4.9 [tuple.rel] | Wrong concepts used for `tuple`'s comparison operators | Yes |  |
2857(i) | C++17 | 22.5 [optional] | `{variant,optional,any}::emplace` should return the constructed value | Yes | 1 |
2862(i) | Resolved | 22.5 [optional] | LWG 2756 should be accepted | Yes |  |
2990(i) | Open | 22.5.3 [optional.optional] | `optional::value_type` is not always a value type | Yes | 3 |
3196(i) | C++20 | 22.5.3 [optional.optional] | `std::optional<T>` is ill-formed is `T` is an array | Yes | 0 |
2900(i) | C++17 | 22.5.3 [optional.optional] | The copy and move constructors of `optional` are not `constexpr` | Yes |  |
2756(i) | C++17 | 22.5.3 [optional.optional] | C++ WP `optional<T>` should 'forward' `T`'s implicit conversions | Yes | 1 |
2825(i) | Resolved | 22.5.3 [optional.optional] | LWG 2756 breaks class template argument deduction for `optional` | Yes | 2 |
3016(i) | NAD | 22.5.3 [optional.optional] | `optional` and over-aligned types | Yes | 3 |
3886(i) | WP | 22.5.3.1 [optional.optional.general] | Monad mo' problems | Yes | 3 |
4141(i) | WP | 22.5.3.1 [optional.optional.general] | Improve prohibitions on "additional storage" | Yes |  |
3709(i) | C++23 | 22.5.3.1 [optional.optional.general] | LWG-3703 was underly ambitious | Yes |  |
2811(i) | New | 22.5.3.2 [optional.ctor] | "Selected constructor" wording is incorrect for `optional`/`variant`/`any` | Yes | 3 |
2842(i) | C++17 | 22.5.3.2 [optional.ctor] | `in_place_t` check for `optional::optional(U&&)` should decay `U` | Yes | 0 |
2753(i) | Resolved | 22.5.3.2 [optional.ctor] | Optional's constructors and assignments need constraints | Yes | 0 |
2746(i) | New | 22.5.3.4 [optional.assign] | Inconsistency between requirements for `emplace` between `optional` and `variant` | Yes | 3 |
2748(i) | C++17 | 22.5.3.5 [optional.swap] | `swappable` traits for `optional`s | Yes | 0 |
4281(i) | New | 22.5.3.7 [optional.observe] | Inconsistency between `value_or()` and `error_or()` in `std::expected` | No | 3 |
4406(i) | New | 22.5.3.7 [optional.observe] | `optional::value_or` return statement is inconsistent with Mandates | Yes | 3 |
3424(i) | New | 22.5.3.7 [optional.observe] | `optional::value_or` should never return a cv-qualified type | Yes | 3 |
2829(i) | Open | 22.5.3.7 [optional.observe] | LWG 2740 leaves behind vacuous words | No | 2 |
2740(i) | C++17 | 22.5.3.7 [optional.observe] | `constexpr optional<T>::operator->` | Yes | 0 |
4015(i) | Open | 22.5.3.8 [optional.monadic] | LWG 3973 broke `const` overloads of `std::optional` monadic operations | Yes | 1 |
4300(i) | Tentatively Ready | 22.5.4.3 [optional.ref.assign] | Missing Returns: element in `optional<T&>::emplace` | Yes |  |
4308(i) | New | 22.5.4.5 [optional.ref.iterators] | `std::optional<T&>::iterator` can't be a contiguous iterator for some `T` | Yes | 1 |
4304(i) | New | 22.5.4.6 [optional.ref.observe] | `std::optional<NonReturnable&>` is ill-formed due to `value_or` | Yes | 1 |
4299(i) | Tentatively Ready | 22.5.4.7 [optional.ref.monadic] | Missing Mandates: part in `optional<T&>::transform` | Yes |  |
4367(i) | New | 22.5.4.7 [optional.ref.monadic] | Improve `optional<T&>::or_else` | Yes | 4 |
3613(i) | New | 22.5.5 [optional.nullopt] | Specify that `nullopt_t` is copyable | Yes | 3 |
2736(i) | C++17 | 22.5.5 [optional.nullopt] | `nullopt_t` insufficiently constrained | Yes | 2 |
3562(i) | NAD | 22.5.5 [optional.nullopt] | Superseding `nullopt_t`'s requirement to not be DefaultConstructible | Yes |  |
2806(i) | C++17 | 22.5.6 [optional.bad.access] | Base class of `bad_optional_access` | Yes | 1 |
4370(i) | Tentatively Ready | 22.5.9 [optional.comp.with.t] | Comparison of `optional<T>` to `T` may be ill-formed | Yes |  |
4072(i) | WP | 22.5.9 [optional.comp.with.t] | `std::optional` comparisons: constrain harder | Yes | 1 |
3566(i) | C++23 | 22.5.9 [optional.comp.with.t] | Constraint recursion for `operator<=>(optional<T>, U)` | Yes |  |
3746(i) | C++23 | 22.5.9 [optional.comp.with.t] | `optional`'s spaceship with `U` with a type derived from `optional` causes infinite constraint meta-recursion | Yes |  |
2945(i) | C++20 | 22.5.9 [optional.comp.with.t] | Order of template parameters in `optional` comparisons | Yes | 2 |
2934(i) | C++17 | 22.5.9 [optional.comp.with.t] | `optional<const T>` doesn't compare with `T` | Yes |  |
3627(i) | Tentatively Ready | 22.5.10 [optional.specalg] | Inconsistent specifications for `std::make_optional` overloads | Yes | 3 |
2805(i) | Resolved | 22.6 [variant] | `void` and reference type alternatives in `variant`, `variant<>` and `index()` | Yes |  |
2881(i) | New | 22.6.3 [variant.variant] | Adopt section III of P0308R0 | No | 3 |
2901(i) | C++17 | 22.6.3 [variant.variant] | Variants cannot properly support allocators | Yes | 0 |
2902(i) | NAD | 22.6.3 [variant.variant] | `variant` should only support complete types | Yes | 0 |
2971(i) | NAD | 22.6.3 [variant.variant] | `variant` should require `Destructible` types | Yes |  |
2991(i) | Tentatively Ready | 22.6.3.2 [variant.ctor] | `variant` copy constructor missing `noexcept(see below)` | Yes |  |
3215(i) | New | 22.6.3.2 [variant.ctor] | `variant` default constructor has vague `constexpr` requirements | No | 2 |
2833(i) | Open | 22.6.3.2 [variant.ctor] | Library needs to specify what it means when it declares a function `constexpr` | Yes | 2 |
3024(i) | C++20 | 22.6.3.2 [variant.ctor] | `variant`'s copies must be deleted instead of disabled via SFINAE | Yes |  |
2903(i) | C++17 | 22.6.3.2 [variant.ctor] | The form of initialization for the emplace-constructors is not specified | Yes |  |
3228(i) | Resolved | 22.6.3.2 [variant.ctor] | Surprising `variant` construction | Yes | 2 |
2882(i) | Resolved | 22.6.3.2 [variant.ctor] | Clarify `variant` construction | Yes |  |
3991(i) | New | 22.6.3.4 [variant.assign] | `variant`'s move assignment should not be guaranteed to produce a valueless by exception state | Yes | 3 |
3069(i) | New | 22.6.3.4 [variant.assign] | Move assigning `variant`'s subobject corrupts data | Yes | 3 |
3585(i) | C++23 | 22.6.3.4 [variant.assign] | Variant converting assignment with immovable alternative | Yes |  |
2904(i) | C++17 | 22.6.3.4 [variant.assign] | Make `variant` move-assignment more exception safe | Yes |  |
2749(i) | C++17 | 22.6.3.7 [variant.swap] | `swappable` traits for `variant`s | Yes | 1 |
4197(i) | New | 22.6.7 [variant.visit] | Complexity of `std::visit` with immediate functions | Yes | 2 |
2970(i) | C++20 | 22.6.7 [variant.visit] | Return type of `std::visit` misspecified | Yes | 2 |
3052(i) | Resolved | 22.6.7 [variant.visit] | `visit` is underconstrained | Yes | 2 |
2809(i) | Resolved | 22.6.12 [variant.hash] | `variant` hash requirements | Yes |  |
2868(i) | C++17 | 22.7.3 [any.bad.any.cast] | Missing specification of `bad_any_cast::what()` | Yes |  |
3416(i) | New | 22.7.4 [any.class] | The Throws: specification of `std::any` does not mention allocation | No | 3 |
2789(i) | C++17 | 22.7.4 [any.class] | Equivalence of contained objects | Yes | 0 |
2744(i) | C++17 | 22.7.4.2 [any.cons] | `any`'s `in_place` constructors | Yes | 0 |
2754(i) | Resolved | 22.7.4.2 [any.cons] | The `in_place` constructors and `emplace` functions added by P0032R3 don't require `CopyConstructible` | Yes | 1 |
2886(i) | NAD | 22.7.4.5 [any.observers] | Keep the `empty()` functions in `any` | Yes |  |
3423(i) | New | 22.7.5 [any.nonmembers] | `std::any_cast` should never return a cv-qualified type | Yes | 3 |
3305(i) | WP | 22.7.5 [any.nonmembers] | `any_cast<void>` | Yes | 2 |
2768(i) | C++17 | 22.7.5 [any.nonmembers] | `any_cast` and move semantics | Yes | 0 |
2769(i) | C++17 | 22.7.5 [any.nonmembers] | Redundant `const` in the return type of `any_cast(const any&)` | Yes | 0 |
3688(i) | New | 22.8.4 [expected.bad] | Exception specifications of copy/move member functions of `std::bad_expected_access` | No | 2 |
4031(i) | WP | 22.8.5 [expected.bad.void] | `bad_expected_access<void>` member functions should be `noexcept` | Yes |  |
3891(i) | New | 22.8.6.1 [expected.object.general] | LWG 3870 breaks `std::expected<cv T, E>` | Yes | 2 |
3754(i) | C++23 | 22.8.6.1 [expected.object.general] | Class template `expected` synopsis contains declarations that do not match the detailed description | Yes |  |
4222(i) | WP | 22.8.6.2 [expected.object.cons] | `expected` constructor from a single value missing a constraint | Yes |  |
3836(i) | C++23 | 22.8.6.2 [expected.object.cons] | `std::expected<bool, E1>` conversion constructor `expected(const expected<U, G>&)` should take precedence over `expected(U&&)` with operator `bool` | Yes | 1 |
4195(i) | New | 22.8.6.4 [expected.object.assign] | `expected<int, int>` isn't specified to be trivially assignable | Yes | 2 |
4026(i) | New | 22.8.6.4 [expected.object.assign] | Assignment operators of `std::expected` should propagate triviality | Yes | 2 |
3951(i) | WP | 22.8.6.5 [expected.object.swap] | §[expected.object.swap]: Using `value()` instead of `has_value()` | Yes |  |
3843(i) | C++23 | 22.8.6.6 [expected.object.obs] | `std::expected<T,E>::value() &` assumes `E` is copy constructible | Yes |  |
3938(i) | WP | 22.8.6.7 [expected.object.monadic] | Cannot use `std::expected` monadic ops with move-only `error_type` | Yes |  |
3973(i) | WP | 22.8.6.7 [expected.object.monadic] | Monadic operations should be ADL-proof | Yes |  |
3866(i) | C++23 | 22.8.6.7 [expected.object.monadic] | Bad Mandates for `expected::transform_error` overloads | Yes |  |
3877(i) | C++23 | 22.8.6.7 [expected.object.monadic] | Incorrect constraints on `const`-qualified monadic overloads for `std::expected` | Yes |  |
4366(i) | Tentatively Ready | 22.8.6.8 [expected.object.eq] | Heterogeneous comparison of `expected` may be ill-formed | Yes |  |
3703(i) | C++23 | 22.8.7.1 [expected.void.general] | Missing requirements for `expected<T, E> requires is_void<T>` | Yes | 2 |
4025(i) | WP | 22.8.7.4 [expected.void.assign] | Move assignment operator of `std::expected<cv void, E>` should not be conditionally deleted | Yes |  |
3687(i) | C++23 | 22.8.7.4 [expected.void.assign] | `expected<cv void, E>` move constructor should move | Yes |  |
3940(i) | WP | 22.8.7.6 [expected.void.obs] | `std::expected<void, E>::value()` also needs `E` to be copy constructible | Yes |  |
4187(i) | New | 22.9.2 [template.bitset] | `bitset::reference` should be const-assignable | Yes | 3 |
2348(i) | Open | 22.9.2 [template.bitset] | `charT('1')` is not the wide equivalent of `'1'` | Yes | 3 |
853(i) | C++11 | 22.9.2 [template.bitset] | `to_string` needs updating with `zero` and `one` | Yes |  |
1113(i) | C++11 | 22.9.2 [template.bitset] | `bitset::to_string` could be simplified | Yes |  |
1227(i) | C++11 | 22.9.2 [template.bitset] | `<bitset>` synopsis overspecified | Yes |  |
1250(i) | C++11 | 22.9.2 [template.bitset] | `<bitset>` still overspecified | Yes |  |
693(i) | CD1 | 22.9.2 [template.bitset] | `std::bitset::all()` missing | Yes |  |
694(i) | CD1 | 22.9.2 [template.bitset] | `std::bitset` and `long long` | Yes |  |
11(i) | TC1 | 22.9.2 [template.bitset] | Bitset minor problems | Yes |  |
1112(i) | NAD | 22.9.2 [template.bitset] | bitsets and new style for loop | Yes |  |
116(i) | Dup | 22.9.2 [template.bitset] | bitset cannot be constructed with a const char* | Yes |  | 778
4140(i) | WP | 22.9.2.1 [template.bitset.general] | Useless default constructors for bit reference types | Yes |  |
4294(i) | Tentatively Ready | 22.9.2.2 [bitset.cons] | `bitset(const CharT*)` constructor needs to be constrained | Yes |  |
2250(i) | C++17 | 22.9.2.2 [bitset.cons] | Follow-up On Library Issue 2207 | Yes | 3 |
1325(i) | C++11 | 22.9.2.2 [bitset.cons] | `bitset` | Yes |  |
396(i) | CD1 | 22.9.2.2 [bitset.cons] | what are characters zero and one | Yes |  |
457(i) | CD1 | 22.9.2.2 [bitset.cons] | bitset constructor: incorrect number of initialized bits | Yes |  |
778(i) | CD1 | 22.9.2.2 [bitset.cons] | std::bitset does not have any constructor taking a string literal | Yes |  | 116
907(i) | C++11 | 22.9.2.3 [bitset.members] | Bitset's immutable element retrieval is inconsistently defined | Yes |  |
186(i) | CD1 | 22.9.2.3 [bitset.members] | bitset::set() second parameter should be bool | Yes |  |
434(i) | CD1 | 22.9.2.3 [bitset.members] | bitset::to_string() hard to use | Yes |  |
1168(i) | NAD Editorial | 22.9.2.3 [bitset.members] | Odd wording for bitset equality operators | Yes |  |
3199(i) | C++20 | 22.9.4 [bitset.operators] | `istream >> bitset<0>` fails | Yes |  |
303(i) | CD1 | 22.9.4 [bitset.operators] | Bitset input operator underspecified | Yes |  |
3805(i) | New | 22.10 [function.objects] | Expression evaluating to a call wrapper is a prvalue, not an object | No | 4 |
2048(i) | C++14 | 22.10 [function.objects] | Unnecessary `mem_fn` overloads | Yes |  |
2149(i) | C++14 | 22.10 [function.objects] | Concerns about 20.8/5 | Yes |  |
185(i) | CD1 | 22.10 [function.objects] | Questionable use of term "inline" | Yes |  |
660(i) | CD1 | 22.10 [function.objects] | Missing Bitwise Operations | Yes |  |
1290(i) | Resolved | 22.10 [function.objects] | Don't require `[u|bi]nary_function` inheritance | Yes |  |
658(i) | Resolved | 22.10 [function.objects] | Two unspecified function comparators in [function.objects] | Yes |  |
1397(i) | Resolved | 22.10 [function.objects] | Deprecate '98 binders | Yes |  |
351(i) | NAD Editorial | 22.10 [function.objects] | unary_negate and binary_negate: struct or class? | Yes |  |
1398(i) | NAD | 22.10 [function.objects] | Users should be able to specialize functors without depending on whole `<functional>` header | Yes |  |
3202(i) | C++20 | 22.10.2 [functional.syn] | P0318R1 was supposed to be revised | Yes | 0 |
4268(i) | New | 22.10.4 [func.require] | `function<void()>` suppresses `nodiscard` warnings | No | 3 |
4319(i) | New | 22.10.4 [func.require] | Supporting copy-elision in function wrappers | Yes | 3 |
4007(i) | New | 22.10.4 [func.require] | Mystic prohibition of calling a `volatile`-qualified perfect forwarding call wrapper | Yes | 3 |
3655(i) | C++23 | 22.10.4 [func.require] | The `INVOKE` operation and `union` types | Yes | 3 |
2219(i) | C++17 | 22.10.4 [func.require] | `INVOKE`-ing a pointer to member with a `reference_wrapper` as the object expression | Yes | 2 |
2387(i) | C++17 | 22.10.4 [func.require] | More nested types that must be accessible and unambiguous | Yes |  |
2486(i) | C++17 | 22.10.4 [func.require] | `mem_fn()` should be required to use perfect forwarding | Yes | 0 |
1294(i) | C++11 | 22.10.4 [func.require] | Difference between callable wrapper and forwarding call wrapper unclear | Yes |  |
1295(i) | C++11 | 22.10.4 [func.require] | Contradictory call wrapper requirements | Yes |  |
1520(i) | C++11 | 22.10.4 [func.require] | `INVOKE` on member data pointer with too many arguments | Yes |  |
2926(i) | Resolved | 22.10.4 [func.require] | `INVOKE(f, t1, t2,... tN)` and `INVOKE(f, t1, t2,... tN, R)` are too similar | Yes |  |
2807(i) | C++17 | 22.10.5 [func.invoke] | `std::invoke` should use `std::is_nothrow_callable` | Yes | 3 |
2690(i) | Resolved | 22.10.5 [func.invoke] | `invoke<R>` | Yes |  |
2894(i) | Resolved | 22.10.5 [func.invoke] | The function template `std::apply()` is required to be `constexpr`, but `std::invoke()` isn't | Yes | 3 |
3046(i) | New | 22.10.6 [refwrap] | Do not require `reference_wrapper` to support non-referenceable function types | Yes | 3 |
2981(i) | C++20 | 22.10.6 [refwrap] | Remove redundant deduction guides from standard library | Yes | 0 |
2993(i) | C++20 | 22.10.6 [refwrap] | `reference_wrapper<T>` conversion from `T&&` | Yes | 3 |
987(i) | C++11 | 22.10.6 [refwrap] | `reference_wrapper` and function types | Yes |  |
2017(i) | C++11 | 22.10.6 [refwrap] | `std::reference_wrapper` makes incorrect usage of `std::result_of` | Yes |  |
2022(i) | C++11 | 22.10.6 [refwrap] | `reference_wrapper<T>::result_type` is underspecified | Yes |  |
521(i) | CD1 | 22.10.6 [refwrap] | Garbled requirements for argument_type in reference_wrapper | Yes |  |
3041(i) | C++20 | 22.10.6.2 [refwrap.const] | Unnecessary `decay` in `reference_wrapper` | Yes | 0 |
688(i) | C++11 | 22.10.6.2 [refwrap.const] | reference_wrapper, cref unsafe, allow binding to rvalues | Yes |  |
689(i) | CD1 | 22.10.6.2 [refwrap.const] | reference_wrapper constructor overly constrained | Yes |  |
3764(i) | C++23 | 22.10.6.5 [refwrap.invoke] | `reference_wrapper::operator()` should propagate `noexcept` | Yes |  |
2435(i) | C++17 | 22.10.6.5 [refwrap.invoke] | `reference_wrapper::operator()`'s Remark should be deleted | Yes | 4 |
4071(i) | WP | 22.10.6.6 [refwrap.comparisons] | `reference_wrapper` comparisons are not SFINAE-friendly | Yes |  |
3146(i) | C++23 | 22.10.6.7 [refwrap.helpers] | Excessive unwrapping in `std::ref`/`cref` | Yes | 3 |
2491(i) | New | 22.10.8 [comparisons] | `std::less<T*>` in constant expression | Yes | 3 |
2547(i) | New | 22.10.8 [comparisons] | Container requirements (and other library text) should say "strict total order", not just "total order" | No | 3 |
2450(i) | C++17 | 22.10.8 [comparisons] | `(greater|less|greater_equal|less_equal)<void>` do not yield a total order for pointers | Yes | 2 |
2562(i) | C++17 | 22.10.8 [comparisons] | Consistent total ordering of pointers by comparison functors | Yes | 3 |
284(i) | CD1 | 22.10.8 [comparisons] | unportable example in 20.3.7, p6 | Yes |  |
3530(i) | C++23 | 22.10.8.8 [comparisons.three.way] | `BUILTIN-PTR-MEOW` should not opt the type out of syntactic checks | Yes |  |
297(i) | CD1 | 22.10.10 [logical.operations] | const_mem_fun_t<>::argument_type should be const T* | Yes |  |
3979(i) | New | 22.10.13 [func.not.fn] | Should we reject `std::bind_front<42>()` and its friends? | Yes | 4 |
2767(i) | C++17 | 22.10.13 [func.not.fn] | `not_fn call_wrapper` can form invalid types | Yes | 0 |
3184(i) | C++20 | 22.10.14 [func.bind.partial] | Inconsistencies in `bind_front` wording | Yes | 0 |
520(i) | CD1 | 22.10.15 [func.bind] | Result_of and pointers to data members | Yes |  |
2010(i) | C++14 | 22.10.15.2 [func.bind.isbind] | `is_* traits` for binding operations can't be meaningfully specialized | Yes |  |
1071(i) | C++11 | 22.10.15.2 [func.bind.isbind] | `is_bind_expression` should derive from `integral_constant<bool>` | Yes |  |
2487(i) | C++17 | 22.10.15.4 [func.bind.bind] | `bind()` should be `const`-overloaded, not cv-overloaded | Yes | 2 |
2545(i) | C++17 | 22.10.15.4 [func.bind.bind] | Simplify wording for `bind` without explicitly specified return type | Yes | 3 |
2021(i) | C++14 | 22.10.15.4 [func.bind.bind] | Further incorrect usages of `result_of` | Yes |  |
817(i) | C++11 | 22.10.15.4 [func.bind.bind] | `bind` needs to be moved | Yes |  |
527(i) | CD1 | 22.10.15.4 [func.bind.bind] | `tr1::bind` has lost its Throws clause | Yes |  |
2957(i) | Resolved | 22.10.15.4 [func.bind.bind] | `bind`'s specification doesn't apply the cv-qualification of the call wrapper to the callable object | Yes | 3 |
816(i) | Resolved | 22.10.15.4 [func.bind.bind] | Should `bind()`'s returned functor have a nofail copy ctor when `bind()` is nofail? | Yes |  |
3824(i) | C++23 | 22.10.15.5 [func.bind.place] | Number of `bind` placeholders is underspecified | Yes |  |
2488(i) | C++17 | 22.10.15.5 [func.bind.place] | Placeholders should be allowed and encouraged to be `constexpr` | Yes | 2 |
2489(i) | C++17 | 22.10.16 [func.memfn] | `mem_fn()` should be `noexcept` | Yes | 0 |
920(i) | C++11 | 22.10.16 [func.memfn] | Ref-qualification support in the library | Yes |  | 1230
3023(i) | Resolved | 22.10.16 [func.memfn] | Clarify unspecified call wrappers | Yes | 3 |
1230(i) | Dup | 22.10.16 [func.memfn] | `mem_fn` and variadic templates | Yes |  | 920
770(i) | CD1 | 22.10.17 [func.wrap] | std::function should use rvalue swap | Yes |  |
4264(i) | New | 22.10.17.1 [func.wrap.general] | Skipping indirection is not allowed for `function_ref` | Yes | 2 |
2233(i) | C++17 | 22.10.17.2 [func.wrap.badcall] | `bad_function_call::what()` unhelpful | Yes | 3 |
2062(i) | C++17 | 22.10.17.3 [func.wrap.func] | Effect contradictions w/o no-throw guarantee of `std::function` swaps | Yes | 2 |
2385(i) | C++17 | 22.10.17.3 [func.wrap.func] | `function::assign` allocator argument doesn't make sense | Yes | 2 |
2393(i) | C++17 | 22.10.17.3 [func.wrap.func] | `std::function`'s Callable definition is broken | Yes | 2 |
2401(i) | C++17 | 22.10.17.3 [func.wrap.func] | `std::function` needs more `noexcept` | Yes | 0 |
2420(i) | C++17 | 22.10.17.3 [func.wrap.func] | `function<void(ArgTypes...)>` does not discard the return value of the target object | Yes | 1 |
1070(i) | C++11 | 22.10.17.3 [func.wrap.func] | Ambiguous move overloads in function | Yes |  |
1240(i) | C++11 | 22.10.17.3 [func.wrap.func] | Deleted comparison functions of `std::function` not needed | Yes |  |
1399(i) | C++11 | 22.10.17.3 [func.wrap.func] | `function` does not need an `explicit` default constructor | Yes |  |
769(i) | CD1 | 22.10.17.3 [func.wrap.func] | std::function should use nullptr_t instead of "unspecified-null-pointer-type" | Yes |  |
2370(i) | Resolved | 22.10.17.3 [func.wrap.func] | Operations involving type-erased allocators should not be `noexcept` in `std::function` | Yes | 3 |
2501(i) | Resolved | 22.10.17.3 [func.wrap.func] | `std::function` requires POCMA/POCCA | Yes | 3 |
2502(i) | Resolved | 22.10.17.3 [func.wrap.func] | `std::function` does not use `allocator::construct` | Yes | 3 |
1023(i) | NAD Editorial | 22.10.17.3 [func.wrap.func] | Unclear inheritance relation for `std::function` | Yes |  |
644(i) | NAD | 22.10.17.3 [func.wrap.func] | Possible typos in 'function' description | Yes |  |
1024(i) | NAD Concepts | 22.10.17.3 [func.wrap.func] | `std::function` constructors overly generous | Yes |  |
1059(i) | NAD Concepts | 22.10.17.3 [func.wrap.func] | Usage of no longer existing FunctionType concept | Yes |  |
3493(i) | New | 22.10.17.3.2 [func.wrap.func.con] | The constructor of `std::function` taking an `F` is missing a constraint | Yes | 3 |
2774(i) | C++23 | 22.10.17.3.2 [func.wrap.func.con] | `std::function` construction vs assignment | Yes | 3 |
3617(i) | C++23 | 22.10.17.3.2 [func.wrap.func.con] | `function`/`packaged_task` deduction guides and deducing `this` | Yes | 2 |
3238(i) | C++20 | 22.10.17.3.2 [func.wrap.func.con] | Insufficiently-defined behavior of `std::function` deduction guides | Yes |  |
2850(i) | C++17 | 22.10.17.3.2 [func.wrap.func.con] | `std::function` move constructor does unnecessary work | Yes | 0 |
2565(i) | C++17 | 22.10.17.3.2 [func.wrap.func.con] | `std::function`'s move constructor should guarantee nothrow for `reference_wrapper`s and function pointers | Yes | 0 |
2781(i) | C++17 | 22.10.17.3.2 [func.wrap.func.con] | Contradictory requirements for `std::function` and `std::reference_wrapper` | Yes | 0 |
2132(i) | C++14 | 22.10.17.3.2 [func.wrap.func.con] | `std::function` ambiguity | Yes | 2 |
1287(i) | C++11 | 22.10.17.3.2 [func.wrap.func.con] | `std::function` requires `CopyConstructible` target object | Yes |  |
1288(i) | C++11 | 22.10.17.3.2 [func.wrap.func.con] | `std::function` assignment from rvalues | Yes |  |
1292(i) | C++11 | 22.10.17.3.2 [func.wrap.func.con] | `std::function` should support all callable types | Yes |  |
1400(i) | C++11 | 22.10.17.3.2 [func.wrap.func.con] | FCD `function` does not need an `explicit` default constructor | Yes |  |
610(i) | CD1 | 22.10.17.3.2 [func.wrap.func.con] | Suggested non-normative note for C++0x | Yes |  |
2813(i) | Resolved | 22.10.17.3.2 [func.wrap.func.con] | `std::function` should not return dangling references | Yes | 2 |
2386(i) | NAD | 22.10.17.3.2 [func.wrap.func.con] | `function::operator=` handles allocators incorrectly | Yes | 1 |
1258(i) | Resolved | 22.10.17.3.3 [func.wrap.func.mod] | std::function Effects clause impossible to satisfy | Yes |  |
1333(i) | C++11 | 22.10.17.3.5 [func.wrap.func.inv] | Missing forwarding during `std::function` invocation | Yes |  |
815(i) | Resolved | 22.10.17.3.5 [func.wrap.func.inv] | `std::function` and `reference_closure` do not use perfect forwarding | Yes |  |
2591(i) | C++17 | 22.10.17.3.6 [func.wrap.func.targ] | `std::function`'s member template `target()` should not lead to undefined behaviour | Yes | 3 |
633(i) | NAD Editorial | 22.10.17.3.6 [func.wrap.func.targ] | Return clause mentions undefined "type()" | Yes |  |
4255(i) | Tentatively Ready | 22.10.17.4.3 [func.wrap.move.ctor] | `move_only_function` constructor should recognize empty `copyable_function`s | Yes |  |
3680(i) | New | 22.10.17.4.3 [func.wrap.move.ctor] | Constructor of `move_only_function` with empty `ref`-qualifier is over-constrained | Yes | 2 |
3642(i) | New | 22.10.17.4.3 [func.wrap.move.ctor] | `move_only_function` assignment operators seem to be defined suboptimal | Yes | 3 |
4373(i) | New | 22.10.17.6.2 [func.wrap.ref.class] | `function_ref` should provide `result_type` | Yes | 3 |
4256(i) | Tentatively Ready | 22.10.17.6.3 [func.wrap.ref.ctor] | Incorrect constrains for `function_ref` constructors from `nontype_t` | Yes |  |
4425(i) | Tentatively Ready | 22.10.17.6.5 [func.wrap.ref.deduct] | CTAD `function_ref` of data member pointer should produce `noexcept` signature | Yes |  |
4127(i) | New | 22.10.18.3 [func.search.bm] | The Standard Library should not use predicates of the form `pred(*i) != false` | Yes | 3 |
4365(i) | LEWG | 22.10.18.3 [func.search.bm] | `boyer_moore_searcher` and `boyer_moore_horspool_searcher` should be `constexpr`-friendly | Yes | 4 |
3512(i) | New | 22.10.19 [unord.hash] | Incorrect exception safety guarantee for unordered containers | No | 3 |
1025(i) | NAD Future | 22.10.19 [unord.hash] | The library should provide more specializations for `std::hash` | Yes |  |
2119(i) | C++17 | 22.10.19 [unord.hash] | Missing `hash` specializations for extended integer types | Yes | 3 |
2148(i) | C++14 | 22.10.19 [unord.hash] | Hashing enums should be supported directly by `std::hash` | Yes |  |
978(i) | C++11 | 22.10.19 [unord.hash] | Hashing smart pointers | Yes |  |
1182(i) | C++11 | 22.10.19 [unord.hash] | Unfortunate hash dependencies | Yes |  |
1245(i) | C++11 | 22.10.19 [unord.hash] | `std::hash<string>` & co | Yes |  |
848(i) | CD1 | 22.10.19 [unord.hash] | Missing `std::hash` specializations for `std::bitset/std::vector<bool>` | Yes |  |
2803(i) | Resolved | 22.10.19 [unord.hash] | `hash` for arithmetic, pointer and standard library types should not throw | Yes | 3 |
2817(i) | Resolved | 22.10.19 [unord.hash] | `std::hash` for `nullptr_t` | Yes |  |
2543(i) | Resolved | 22.10.19 [unord.hash] | LWG 2148 (hash support for enum types) seems under-specified | Yes | 2 |
1317(i) | NAD | 22.10.19 [unord.hash] | make_hash | Yes |  |
1072(i) | NAD Concepts | 22.10.19 [unord.hash] | Is `std::hash` a constrained template or not? | Yes |  |
3656(i) | C++23 | 22.11.5 [bit.pow.two] | Inconsistent bit operations returning a count | Yes | 3 |
3968(i) | New | 22.11.8 [bit.endian] | `std::endian::native` value should be more specific about object representations | Yes | 4 |
4247(i) | WP | 22.12 [stdbit.h.syn] | Header `<stdbit.h>` is not yet freestanding | Yes |  |

## Section 23 (410 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
4173(i) | New | 23 [containers] | Better term for "references, pointers and iterators to elements" | No | 4 |
4176(i) | New | 23 [containers] | Refer back to container requirements when extending them | No | 4 |
2884(i) | LEWG | 23 [containers] | Relational operators for containers should sfinae; if the underlying type is not comparable, neither should the container be | No | 4 |
2307(i) | LEWG | 23 [containers] | Should the Standard Library use `explicit` only when necessary? | No | 2 |
2193(i) | C++14 | 23 [containers] | Default constructors for standard library containers are explicit | Yes | 1 |
774(i) | C++11 | 23 [containers] | Member `swap` undefined for most containers | Yes |  |
868(i) | C++11 | 23 [containers] | Default construction and value-initialization | Yes |  |
883(i) | C++11 | 23 [containers] | swap circular definition | Yes |  |
2913(i) | Resolved | 23 [containers] | Containers need deduction guides | Yes |  |
767(i) | Resolved | 23 [containers] | Forwarding and backward compatibility | Yes |  |
2885(i) | NAD | 23 [containers] | The relational operators of `optional` and `variant` completely reflect the semantics of the element types — this is inconsistent with other types in the library | Yes |  |
1242(i) | NAD | 23 [containers] | Enable SCARY iterators | Yes |  |
97(i) | NAD | 23 [containers] | Insert inconsistent definition | Yes |  |
470(i) | NAD | 23 [containers] | accessing containers from their elements' special functions | Yes |  |
3059(i) | New | 23.2 [container.requirements] | Wrong requirements for map-like associative container assignment? | No | 3 |
2261(i) | C++17 | 23.2 [container.requirements] | Are containers required to use their '`pointer`' type internally? | Yes | 2 |
704(i) | C++11 | 23.2 [container.requirements] | `MoveAssignable` requirement for container value type overly strict | Yes |  |
861(i) | C++11 | 23.2 [container.requirements] | Incomplete specification of `EqualityComparable` for `std::forward_list` | Yes |  |
1416(i) | C++11 | 23.2 [container.requirements] | `forward_list::erase_after` should not be allowed to throw | Yes |  |
179(i) | CD1 | 23.2 [container.requirements] | Comparison of const_iterators to iterators doesn't work | Yes |  |
276(i) | CD1 | 23.2 [container.requirements] | Assignable requirement for container value type overly strict | Yes |  |
322(i) | CD1 | 23.2 [container.requirements] | iterator and const_iterator should have the same value type | Yes |  |
371(i) | CD1 | 23.2 [container.requirements] | Stability of multiset and multimap member functions | Yes |  |
589(i) | CD1 | 23.2 [container.requirements] | Requirements on iterators of member template functions of containers | Yes |  | 536
675(i) | CD1 | 23.2 [container.requirements] | Move assignment of containers | Yes |  |
759(i) | CD1 | 23.2 [container.requirements] | A reference is not an object | Yes |  |
766(i) | CD1 | 23.2 [container.requirements] | Inconsistent exception guarantees between ordered and unordered associative containers | Yes |  |
842(i) | CD1 | 23.2 [container.requirements] | `ConstructibleAsElement` and bit containers | Yes |  |
51(i) | TC1 | 23.2 [container.requirements] | Requirement to not invalidate iterators missing | Yes |  |
760(i) | NAD | 23.2 [container.requirements] | The emplace issue | Yes | 2 |
279(i) | NAD | 23.2 [container.requirements] | const and non-const iterators should have equivalent typedefs | Yes |  |
632(i) | NAD | 23.2 [container.requirements] | Time complexity of `size()` for `std::set` | Yes |  |
1330(i) | NAD | 23.2 [container.requirements] | Move container requirements into requirements tables | Yes |  |
479(i) | Dup | 23.2 [container.requirements] | Container requirements and placement new | Yes |  | 580
536(i) | Dup | 23.2 [container.requirements] | Container iterator constructor and explicit convertibility | Yes |  | 589
2269(i) | New | 23.2.2 [container.requirements.general] | Container iterators and argument-dependent lookup | No | 4 |
2321(i) | Open | 23.2.2 [container.requirements.general] | Moving containers should (usually) be required to preserve iterators | Yes | 3 |
1521(i) | Open | 23.2.2 [container.requirements.general] | Requirements on internal pointer representations in containers | Yes | 3 |
3028(i) | C++23 | 23.2.2 [container.requirements.general] | Container requirements tables should distinguish `const` and non-`const` variables | Yes | 3 |
3352(i) | C++20 | 23.2.2 [container.requirements.general] | `strong_equality` isn't a thing | Yes | 1 |
2448(i) | C++17 | 23.2.2 [container.requirements.general] | Non-normative Container destructor specification | Yes | 0 |
2218(i) | C++17 | 23.2.2 [container.requirements.general] | Unclear how containers use `allocator_traits::construct()` | Yes | 3 |
2794(i) | C++17 | 23.2.2 [container.requirements.general] | Missing requirements for allocator pointers | Yes | 0 |
2177(i) | C++14 | 23.2.2 [container.requirements.general] | Requirements on `Copy/MoveInsertable` | Yes |  |
2182(i) | C++14 | 23.2.2 [container.requirements.general] | `Container::[const_]reference` types are misleadingly specified | Yes | 0 |
2308(i) | C++14 | 23.2.2 [container.requirements.general] | Clarify container destructor requirements w.r.t. `std::array` | Yes | 0 |
2320(i) | C++14 | 23.2.2 [container.requirements.general] | `select_on_container_copy_construction()` takes allocators, not containers | Yes | 0 |
2105(i) | C++14 | 23.2.2 [container.requirements.general] | Inconsistent requirements on `const_iterator`'s `value_type` | Yes |  |
2211(i) | C++14 | 23.2.2 [container.requirements.general] | Replace ambiguous use of "Allocator" in container requirements | Yes |  |
2257(i) | C++14 | 23.2.2 [container.requirements.general] | Simplify container requirements with the new algorithms | Yes |  |
1034(i) | C++11 | 23.2.2 [container.requirements.general] | Clarify generality of Container Requirement tables | Yes |  |
1319(i) | C++11 | 23.2.2 [container.requirements.general] | Containers should require an iterator that is at least a Forward Iterator | Yes |  |
985(i) | Resolved | 23.2.2 [container.requirements.general] | Allowing throwing move | Yes |  |
580(i) | NAD Editorial | 23.2.2 [container.requirements.general] | unused allocator members | Yes |  | 479
1415(i) | NAD Editorial | 23.2.2 [container.requirements.general] | Iterator stability bans the short-string optimization | Yes |  |
1035(i) | NAD | 23.2.2 [container.requirements.general] | `<array>::swap` can invalidate references, pointers, and iterators | Yes |  |
2167(i) | NAD | 23.2.2 [container.requirements.general] | Copy assignment requirements of Containers | Yes |  |
3431(i) | WP | 23.2.2.4 [container.opt.reqmts] | `<=>` for containers should require `three_way_comparable<T>` instead of `<=>` | Yes | 2 |
3976(i) | New | 23.2.2.5 [container.alloc.reqmts] | What does it mean for a type to be "allocator aware"? | No | 4 |
3957(i) | WP | 23.2.2.5 [container.alloc.reqmts] | §[container.alloc.reqmts] The value category of `v` should be claimed | Yes |  |
2200(i) | C++14 | 23.2.3 [container.requirements.dataraces] | Data race avoidance for all containers, not only for sequences | Yes |  |
1329(i) | Resolved | 23.2.3 [container.requirements.dataraces] | Data races on `vector<bool>` | Yes |  |
3297(i) | New | 23.2.4 [sequence.reqmts] | Useless sequence container requirement | Yes | 3 |
2705(i) | New | 23.2.4 [sequence.reqmts] | Questionable precondition on Sequence containers `a.assign(n, t)` | Yes | 3 |
2206(i) | Open | 23.2.4 [sequence.reqmts] | Inaccuracy in `initializer_list` constructor requirements | Yes | 3 |
4396(i) | LEWG | 23.2.4 [sequence.reqmts] | Improve `inplace_vector(from_range_t, R&& rg)` | Yes | 3 |
4147(i) | WP | 23.2.4 [sequence.reqmts] | Precondition on `inplace_vector::emplace` | Yes |  |
3927(i) | WP | 23.2.4 [sequence.reqmts] | Unclear preconditions for `operator[]` for sequence containers | Yes |  |
3732(i) | C++23 | 23.2.4 [sequence.reqmts] | `prepend_range` and `append_range` can't be amortized constant time | Yes |  |
3742(i) | C++23 | 23.2.4 [sequence.reqmts] | `deque::prepend_range` needs to permute | Yes | 2 |
2266(i) | C++17 | 23.2.4 [sequence.reqmts] | `vector` and `deque` have incorrect `insert` requirements | Yes | 2 |
2698(i) | C++17 | 23.2.4 [sequence.reqmts] | Effect of `assign()` on iterators/pointers/references | Yes | 0 |
2231(i) | C++14 | 23.2.4 [sequence.reqmts] | DR 704 removes complexity guarantee for `clear()` | Yes |  |
149(i) | C++11 | 23.2.4 [sequence.reqmts] | Insert should return iterator to first element inserted | Yes |  |
1037(i) | C++11 | 23.2.4 [sequence.reqmts] | Unclear status of `match_results` as library container | Yes |  |
1038(i) | C++11 | 23.2.4 [sequence.reqmts] | Sequence requirement table needs to reference several new containers | Yes |  |
1039(i) | C++11 | 23.2.4 [sequence.reqmts] | Sequence container `back` function should also support `const_iterator` | Yes |  |
1234(i) | C++11 | 23.2.4 [sequence.reqmts] | "Do the right thing" and `NULL` | Yes |  |
355(i) | CD1 | 23.2.4 [sequence.reqmts] | Operational semantics for a.back() | Yes |  |
438(i) | CD1 | 23.2.4 [sequence.reqmts] | Ambiguity in the "do the right thing" clause | Yes |  |
139(i) | TC1 | 23.2.4 [sequence.reqmts] | Optional sequence operation table description unclear | Yes |  |
151(i) | TC1 | 23.2.4 [sequence.reqmts] | Can't currently clear() empty container | Yes |  |
725(i) | NAD Editorial | 23.2.4 [sequence.reqmts] | Optional sequence container requirements column label | Yes |  |
1058(i) | NAD Editorial | 23.2.4 [sequence.reqmts] | New container issue | Yes |  |
1301(i) | NAD Editorial | 23.2.4 [sequence.reqmts] | `clear()` and assignment | Yes |  |
526(i) | NAD | 23.2.4 [sequence.reqmts] | Is it undefined if a function in the standard changes in parameters? | Yes |  |
1259(i) | NAD | 23.2.4 [sequence.reqmts] | Should initializer-list constructors move elements? | Yes |  |
1036(i) | NAD Concepts | 23.2.4 [sequence.reqmts] | Remove iterator specification that is redundant due to concept constraints | Yes |  |
4159(i) | New | 23.2.5 [container.node] | Uses-allocator construction mechanisms should be opted out for node handles | Yes | 3 |
3438(i) | New | 23.2.5.1 [container.node.overview] | §[container.node.overview] missing `multiset`/`map` cases | No | 3 |
2743(i) | C++23 | 23.2.5.1 [container.node.overview] | p0083r3 `node_handle` private members missing "exposition only" comment | Yes | 3 |
3227(i) | New | 23.2.7 [associative.reqmts] | Ambiguity issue for `extract` in ordered and unordered associative containers | Yes | 3 |
2362(i) | New | 23.2.7 [associative.reqmts] | unique, associative `emplace()` should not move/copy the `mapped_type` constructor arguments when no insertion happens | No | 3 |
2844(i) | Open | 23.2.7 [associative.reqmts] | Stability of `a_uniq.insert(i, j)` | No | 3 |
2227(i) | Open | 23.2.7 [associative.reqmts] | Stateful comparison objects in associative containers | No | 3 |
2215(i) | Open | 23.2.7 [associative.reqmts] | (unordered) associative container functors should be `CopyConstructible` | Yes | 3 |
2436(i) | C++17 | 23.2.7 [associative.reqmts] | Comparators for associative containers should always be `CopyConstructible` | Yes | 2 |
2542(i) | C++17 | 23.2.7 [associative.reqmts] | Missing `const` requirements for associative containers | Yes | 1 |
2322(i) | C++14 | 23.2.7 [associative.reqmts] | Associative(`initializer_list`, stuff) constructors are underspecified | Yes | 0 |
1214(i) | C++14 | 23.2.7 [associative.reqmts] | Insufficient/inconsistent key immutability requirements for associative containers | Yes |  |
2258(i) | C++14 | 23.2.7 [associative.reqmts] | `a.erase(q1, q2)` unable to directly return `q2` | Yes | 0 |
2299(i) | C++14 | 23.2.7 [associative.reqmts] | [CD] Effects of inaccessible `key_compare::is_transparent` type are not clear | Yes | 1 |
982(i) | C++11 | 23.2.7 [associative.reqmts] | Wrong complexity for initializer_list assignment in Table 85 | Yes |  |
1040(i) | C++11 | 23.2.7 [associative.reqmts] | Clarify possible sameness of associative container's `iterator` and `const_iterator` | Yes |  |
1253(i) | C++11 | 23.2.7 [associative.reqmts] | invalidation of iterators and `emplace` vs. `insert` inconsistence in assoc. containers | Yes |  |
103(i) | CD1 | 23.2.7 [associative.reqmts] | set::iterator is required to be modifiable, but this allows modification of keys | Yes |  |
130(i) | CD1 | 23.2.7 [associative.reqmts] | Return type of container::erase(iterator) differs for associative containers | Yes |  | 451
233(i) | CD1 | 23.2.7 [associative.reqmts] | Insertion hints in associative containers | Yes |  | 192, 246
264(i) | CD1 | 23.2.7 [associative.reqmts] | Associative container `insert(i, j)` complexity requirements are not feasible. | Yes |  | 102
316(i) | CD1 | 23.2.7 [associative.reqmts] | Vague text in Table 69 | Yes |  |
354(i) | CD1 | 23.2.7 [associative.reqmts] | Associative container lower/upper bound requirements | Yes |  |
224(i) | TC1 | 23.2.7 [associative.reqmts] | clear() complexity for associative containers refers to undefined N | Yes |  |
1041(i) | Resolved | 23.2.7 [associative.reqmts] | Add associative/unordered container functions that allow to extract elements | Yes |  |
2830(i) | Resolved | 23.2.7 [associative.reqmts] | `insert_return_type` is only defined for containers with unique keys | Yes |  |
2052(i) | Resolved | 23.2.7 [associative.reqmts] | Mixup between `mapped_type` and `value_type` for associative containers | Yes | 2 |
2430(i) | NAD | 23.2.7 [associative.reqmts] | Heterogeneous container lookup should be enabled using meta-function instead of nested type | Yes |  |
2772(i) | NAD | 23.2.7 [associative.reqmts] | Inconsistency in the `insert(node)` interface | Yes | 2 |
82(i) | NAD | 23.2.7 [associative.reqmts] | Missing constant for set elements | Yes |  |
192(i) | NAD | 23.2.7 [associative.reqmts] | a.insert(p,t) is inefficient and overconstrained | Yes |  | 233
215(i) | NAD | 23.2.7 [associative.reqmts] | Can a map's key_type be const? | Yes |  |
494(i) | NAD | 23.2.7 [associative.reqmts] | Wrong runtime complexity for associative container's insert and delete | Yes |  |
763(i) | NAD | 23.2.7 [associative.reqmts] | Renaming `emplace()` overloads | Yes |  |
1302(i) | NAD | 23.2.7 [associative.reqmts] | different `emplace` semantics for sequence and associated containers | Yes |  |
102(i) | Dup | 23.2.7 [associative.reqmts] | Bug in insert range in associative containers | Yes |  | 264
246(i) | Dup | 23.2.7 [associative.reqmts] | `a.insert(p,t)` is incorrectly specified | Yes |  | 233
451(i) | Dup | 23.2.7 [associative.reqmts] | Associative erase should return an iterator | Yes |  | 130
4132(i) | New | 23.2.7.1 [associative.reqmts.general] | Throws specifications need to include `boolean-testable` operations | Yes | 3 |
3577(i) | New | 23.2.7.1 [associative.reqmts.general] | Merging an (unordered) associative container with itself | No | 3 |
3691(i) | New | 23.2.7.1 [associative.reqmts.general] | Replacement of keys in associative containers | Yes | 3 |
3578(i) | WP | 23.2.7.1 [associative.reqmts.general] | Iterator SCARYness in the context of associative container merging | Yes | 3 |
4046(i) | New | 23.2.7.2 [associative.reqmts.except] | Effects of inserting into or erasing from flat container adaptors when an exception is thrown need to be more permissive | No | 2 |
1175(i) | Open | 23.2.8 [unord.req] | `unordered` complexity | Yes | 3 |
2198(i) | Open | 23.2.8 [unord.req] | `max_load_factor(z)` makes no strong guarantees, but bans useful behavior | Yes | 3 |
2977(i) | C++20 | 23.2.8 [unord.req] | `unordered_meow::merge()` has incorrect Throws: clause | Yes | 0 |
2156(i) | C++17 | 23.2.8 [unord.req] | Unordered containers' `reserve(n)` reserves for `n-1` elements | Yes | 3 |
2540(i) | C++17 | 23.2.8 [unord.req] | `unordered_multimap::insert` hint iterator | Yes | 3 |
2550(i) | C++17 | 23.2.8 [unord.req] | Wording of unordered container's `clear()` method complexity | Yes | 2 |
2304(i) | C++14 | 23.2.8 [unord.req] | Complexity of `count` in unordered associative containers | Yes | 0 |
2356(i) | C++14 | 23.2.8 [unord.req] | Stability of erasure in unordered associative containers | Yes | 2 |
869(i) | C++11 | 23.2.8 [unord.req] | Bucket (local) iterators and iterating past end | Yes |  |
870(i) | C++11 | 23.2.8 [unord.req] | Do unordered containers not support function pointers for predicate/hasher? | Yes |  |
981(i) | C++11 | 23.2.8 [unord.req] | Unordered container requirements should add `initializer_list` support | Yes |  |
1189(i) | C++11 | 23.2.8 [unord.req] | Awkward interface for changing the number of buckets in an unordered associative container | Yes |  |
1197(i) | C++11 | 23.2.8 [unord.req] | Can unordered containers have `bucket_count() == 0`? | Yes |  |
518(i) | CD1 | 23.2.8 [unord.req] | Are insert and erase stable for unordered_multiset and unordered_multimap? | Yes |  |
2831(i) | Resolved | 23.2.8 [unord.req] | Equality can be defined when `Hash` function objects have different behaviour | Yes |  |
3176(i) | Resolved | 23.2.8 [unord.req] | Underspecified behavior of unordered containers when `Container::key_equal` differs from `Pred` | Yes | 2 |
3468(i) | NAD | 23.2.8 [unord.req] | Transparent lookups in unordered containers are inconsistent | Yes |  |
1188(i) | NAD | 23.2.8 [unord.req] | Unordered containers should have a minimum load factor as well as a maximum | Yes |  |
2199(i) | NAD | 23.2.8 [unord.req] | unordered containers are required to have an initial max load factor of 1.0 | Yes | 3 |
579(i) | NAD | 23.2.8 [unord.req] | `erase(iterator)` for unordered containers should not return an iterator | Yes |  |
764(i) | NAD | 23.2.8 [unord.req] | `equal_range` on unordered containers should return a `pair` of `local_iterators` | Yes |  |
1190(i) | NAD | 23.2.8 [unord.req] | Setting the maximum load factor should return the previous value | Yes |  |
2006(i) | NAD | 23.2.8 [unord.req] | `emplace` broken for associative containers | Yes |  |
3622(i) | C++23 | 23.2.8.1 [unord.req.general] | Misspecified transitivity of equivalence in §[unord.req.general] | Yes | 2 |
2189(i) | Open | 23.2.8.2 [unord.req.except] | Throwing `swap` breaks unordered containers' state | No | 3 |
2209(i) | C++14 | 23.3 [sequences] | `assign()` overspecified for sequence containers | Yes |  |
2210(i) | C++14 | 23.3 [sequences] | Missing allocator-extended constructor for allocator-aware containers | Yes |  |
679(i) | CD1 | 23.3 [sequences] | resize parameter by value | Yes |  |
1042(i) | NAD | 23.3 [sequences] | Provide `ContiguousStorage` concept and apply it to corresponding containers | Yes |  |
2427(i) | C++17 | 23.3.1 [sequences.general] | Container adaptors as sequence containers, redux | Yes | 0 |
2914(i) | Resolved | 23.3.2 [array.syn] | `std::array` does not support class-template deduction from initializers | Yes |  |
617(i) | Open | 23.3.3 [array] | `std::array` is a sequence that doesn't satisfy the sequence requirements? | No | 3 |
1306(i) | C++11 | 23.3.3 [array] | `pointer` and `const_pointer` for `<array>` | Yes |  |
519(i) | CD1 | 23.3.3 [array] | Data() undocumented | Yes |  |
720(i) | CD1 | 23.3.3 [array] | Omissions in constexpr usages | Yes |  |
776(i) | CD1 | 23.3.3 [array] | Undescribed `assign` function of `std::array` | Yes |  |
2443(i) | Resolved | 23.3.3 [array] | `std::array` member functions should be `constexpr` | Yes |  |
2335(i) | NAD | 23.3.3 [array] | `array<array<int, 3>, 4>` should be layout-compatible with `int[4][3]` | Yes | 3 |
851(i) | NAD | 23.3.3 [array] | simplified array construction | Yes |  |
588(i) | NAD | 23.3.3 [array] | requirements on zero sized `tr1::arrays` and other details | Yes |  |
930(i) | NAD | 23.3.3 [array] | Access to std::array data as built-in array type | Yes |  |
3219(i) | New | 23.3.3.1 [array.overview] | `std::array` overview container requirements are incorrect | Yes | 3 |
2823(i) | Open | 23.3.3.1 [array.overview] | `std::array` initialization is still not permissive enough | Yes | 3 |
2310(i) | C++17 | 23.3.3.1 [array.overview] | Public exposition only member in `std::array` | Yes | 4 |
2590(i) | C++17 | 23.3.3.1 [array.overview] | Aggregate initialization for `std::array` | Yes | 0 |
2897(i) | Resolved | 23.3.3.1 [array.overview] | `array::iterator` and `array::const_iterator` should be literal types | Yes | 2 |
3488(i) | Open | 23.3.3.4 [array.special] | Is `array<const int, 0>` swappable or not? | Yes | 3 |
4276(i) | Tentatively Ready | 23.3.3.5 [array.zero] | `front()` and `back()` are not hardened for zero-length `std::array`s | Yes |  |
2157(i) | Open | 23.3.3.5 [array.zero] | How does `std::array<T,0>` initialization work when `T` is not default-constructible? | Yes | 3 |
1417(i) | C++11 | 23.3.3.5 [array.zero] | `front/back` on a zero-sized `array` should be undefined | Yes |  |
237(i) | CD1 | 23.3.5.2 [deque.cons] | Undefined expression in complexity specification | Yes |  |
144(i) | TC1 | 23.3.5.2 [deque.cons] | Deque constructor complexity wrong | Yes |  |
4225(i) | New | 23.3.5.3 [deque.capacity] | What should happen when an exception is thrown on resizing `std::deque`, `std::forward_list`, or `std::list`? | Yes | 3 |
1418(i) | C++11 | 23.3.5.3 [deque.capacity] | Effects of `resize(size())` on a `deque` | Yes |  |
850(i) | CD1 | 23.3.5.3 [deque.capacity] | Should `shrink_to_fit` apply to `std::deque`? | Yes |  |
855(i) | NAD | 23.3.5.3 [deque.capacity] | capacity() and reserve() for deque? | Yes |  |
4123(i) | New | 23.3.5.4 [deque.modifiers] | Container effects use "the assignment operator or move assignment operator" | Yes | 3 |
3308(i) | New | 23.3.5.4 [deque.modifiers] | `vector` and `deque` iterator `erase` invalidates elements even when no change occurs | Yes | 3 |
2953(i) | C++20 | 23.3.5.4 [deque.modifiers] | LWG 2853 should apply to `deque::erase` too | Yes | 0 |
2364(i) | C++17 | 23.3.5.4 [deque.modifiers] | `deque` and `vector` `pop_back` don't specify iterator invalidation requirements | Yes | 0 |
2477(i) | C++17 | 23.3.5.4 [deque.modifiers] | Inconsistency of wordings in `std::vector::erase()` and `std::deque::erase()` | Yes | 0 |
638(i) | CD1 | 23.3.5.4 [deque.modifiers] | `deque` end invalidation during erase | Yes |  |
878(i) | C++11 | 23.3.7 [forward.list] | `forward_list` preconditions | Yes |  |
1276(i) | C++11 | 23.3.7 [forward.list] | `forwardlist` missing allocator constructors | Yes |  |
1419(i) | NAD Editorial | 23.3.7 [forward.list] | `forward_list::erase_after` should return an iterator | Yes |  |
2042(i) | C++11 | 23.3.7.3 [forward.list.iter] | Comparing `forward_list::before_begin()` to `forward_list::end()` | Yes |  |
4164(i) | WP | 23.3.7.5 [forward.list.modifiers] | Missing guarantees for `forward_list` modifiers | Yes | 3 |
3817(i) | C++23 | 23.3.7.5 [forward.list.modifiers] | Missing preconditions on `forward_list` modifiers | Yes |  |
2585(i) | C++17 | 23.3.7.5 [forward.list.modifiers] | `forward_list::resize(size_type, const value_type&)` effects incorrect | Yes | 0 |
1278(i) | C++11 | 23.3.7.5 [forward.list.modifiers] | Inconsistent return values for `forward_list::insert_after` | Yes |  |
1340(i) | C++11 | 23.3.7.5 [forward.list.modifiers] | Why does `forward_list::resize` take the object to be copied by value? | Yes |  |
897(i) | Resolved | 23.3.7.5 [forward.list.modifiers] | Forward_list issues... Part 2 | Yes |  |
3088(i) | C++23 | 23.3.7.6 [forward.list.ops] | `forward_list::merge` behavior unclear when passed `*this` | Yes | 3 |
3017(i) | C++20 | 23.3.7.6 [forward.list.ops] | `list splice` functions should use `addressof` | Yes | 0 |
2045(i) | C++14 | 23.3.7.6 [forward.list.ops] | `forward_list::merge` and `forward_list::splice_after` with unequal allocators | Yes |  |
2123(i) | C++14 | 23.3.7.6 [forward.list.ops] | `merge()` allocator requirements for lists versus forward lists | Yes |  |
2222(i) | C++14 | 23.3.7.6 [forward.list.ops] | Inconsistency in description of `forward_list::splice_after` single-element overload | Yes |  |
898(i) | C++11 | 23.3.7.6 [forward.list.ops] | Small contradiction in n2723 to forward to committee | Yes |  |
1133(i) | C++11 | 23.3.7.6 [forward.list.ops] | Does N2844 break current specification of list::splice? | Yes |  |
1310(i) | C++11 | 23.3.7.6 [forward.list.ops] | `forward_list splice_after` from lvalues | Yes |  |
892(i) | NAD Editorial | 23.3.7.6 [forward.list.ops] | Forward_list issues... | Yes |  |
919(i) | NAD | 23.3.7.6 [forward.list.ops] | (`forward_`)`list` specialized remove algorithms are over constrained | Yes |  |
4135(i) | WP | 23.3.7.7 [forward.list.erasure] | The helper lambda of `std::erase` for `list` should specify return type as `bool` | Yes |  |
4320(i) | New | 23.3.9 [hive] | `hive` operations involving insertion/erasure should have `𝒪(log n)` time complexity | Yes |  |
4379(i) | New | 23.3.9.3 [hive.capacity] | `hive::reserve()` needs Throws: element adjusted to match block min/max considerations | Yes | 3 |
4380(i) | New | 23.3.9.3 [hive.capacity] | `hive::reserve()` complexity does not reflect potential deallocation of blocks | Yes | 3 |
4323(i) | New | 23.3.9.5 [hive.operations] | `hive::unique` time complexity should incorporate potential block removal complexity | Yes | 3 |
4318(i) | Tentatively Ready | 23.3.9.6 [hive.erasure] | Have `hive::erase_if` reevaluate `end()` to avoid UB | Yes |  |
4233(i) | WP | 23.3.9.6 [hive.erasure] | The helper lambda of `std::erase` for `hive` should specify return type as `bool` | Yes |  |
307(i) | CD1 | 23.3.11 [list] | Lack of reference typedefs in container adaptors | Yes |  |
320(i) | CD1 | 23.3.11.2 [list.cons] | list::assign overspecified | Yes |  |
410(i) | CD1 | 23.3.11.2 [list.cons] | Missing semantics for stack and queue comparison operators | Yes |  |
1420(i) | C++11 | 23.3.11.3 [list.capacity] | Effects of `resize(size())` on a `list` | Yes |  |
132(i) | TC1 | 23.3.11.3 [list.capacity] | list::resize description uses random access iterators | Yes |  |
2997(i) | C++23 | 23.3.11.5 [list.ops] | LWG 491 and the specification of `{forward_,}list::unique` | Yes | 3 |
2998(i) | C++20 | 23.3.11.5 [list.ops] | Requirements on function objects passed to `{forward_,}list`-specific algorithms | Yes | 0 |
3087(i) | C++20 | 23.3.11.5 [list.ops] | One final `&x` in §[list.ops] | Yes | 3 |
2824(i) | C++17 | 23.3.11.5 [list.ops] | `list::sort` should say that the order of elements is unspecified if an exception is thrown | Yes | 0 |
2122(i) | C++14 | 23.3.11.5 [list.ops] | `merge()` stability for lists versus forward lists | Yes |  |
1207(i) | C++11 | 23.3.11.5 [list.ops] | Underspecified `std::list` operations? | Yes |  |
1215(i) | C++11 | 23.3.11.5 [list.ops] | `list::merge` with unequal allocators | Yes |  |
250(i) | CD1 | 23.3.11.5 [list.ops] | splicing invalidates iterators | Yes |  |
278(i) | CD1 | 23.3.11.5 [list.ops] | What does iterator validity mean? | Yes |  |
300(i) | CD1 | 23.3.11.5 [list.ops] | list::merge() specification incomplete | Yes |  |
315(i) | CD1 | 23.3.11.5 [list.ops] | Bad "range" in list::unique complexity | Yes |  |
2279(i) | NAD | 23.3.11.5 [list.ops] | Carefully state effects of `list::splice` function | Yes |  |
131(i) | NAD | 23.3.11.5 [list.ops] | list::splice throws nothing | Yes |  |
491(i) | NAD | 23.3.11.5 [list.ops] | std::list<>::unique incorrectly specified | Yes |  |
464(i) | CD1 | 23.3.13 [vector] | Suggestion for new member functions in standard containers | Yes |  |
469(i) | CD1 | 23.3.13 [vector] | vector<bool> ill-formed relational operators | Yes |  |
496(i) | CD1 | 23.3.13 [vector] | Illegal use of "T" in vector<bool> | Yes |  |
69(i) | TC1 | 23.3.13 [vector] | Must elements of a vector be contiguous? | Yes |  |
101(i) | NAD Editorial | 23.3.13 [vector] | No way to free storage for vector and deque | Yes |  |
757(i) | NAD Editorial | 23.3.13 [vector] | Typo in the synopsis of vector | Yes |  |
1184(i) | NAD | 23.3.13 [vector] | Feature request: dynamic bitset | Yes |  |
96(i) | NAD | 23.3.13 [vector] | Vector<bool> is not a container | Yes |  |
134(i) | TC1 | 23.3.13.2 [vector.cons] | vector constructors over specified | Yes |  |
3758(i) | New | 23.3.13.3 [vector.capacity] | Element-relocating operations of `std::vector` and `std::deque` should conditionally require Cpp17CopyInsertable in their preconditions | No | 3 |
2158(i) | Open | 23.3.13.3 [vector.capacity] | Conditional copy/move in `std::vector` | Yes | 3 |
1102(i) | Open | 23.3.13.3 [vector.capacity] | `std::vector`'s reallocation policy still unclear | Yes | 3 |
2160(i) | C++17 | 23.3.13.3 [vector.capacity] | Unintended destruction ordering-specification of `resize` | Yes | 1 |
2223(i) | C++17 | 23.3.13.3 [vector.capacity] | `shrink_to_fit` effect on iterator validity | Yes | 2 |
2323(i) | C++14 | 23.3.13.3 [vector.capacity] | `vector::resize(n, t)`'s specification should be simplified | Yes | 0 |
2033(i) | C++14 | 23.3.13.3 [vector.capacity] | Preconditions of `reserve`, `shrink_to_fit`, and `resize` functions | Yes |  |
1525(i) | C++11 | 23.3.13.3 [vector.capacity] | Effects of `resize(size())` on a `vector` | Yes |  |
329(i) | CD1 | 23.3.13.3 [vector.capacity] | vector capacity, reserve and reallocation | Yes |  |
341(i) | CD1 | 23.3.13.3 [vector.capacity] | Vector reallocation and swap | Yes |  |
755(i) | CD1 | 23.3.13.3 [vector.capacity] | `std::vector` and `std:string` lack explicit shrink-to-fit operations | Yes |  |
2066(i) | Resolved | 23.3.13.3 [vector.capacity] | Missing specification of `vector::resize(size_type)` | Yes |  |
1246(i) | NAD | 23.3.13.3 [vector.capacity] | `vector::resize()` missing efficiency guarantee | Yes |  |
2596(i) | C++17 | 23.3.13.4 [vector.data] | `vector::data()` should use `addressof` | Yes | 0 |
1312(i) | C++11 | 23.3.13.4 [vector.data] | `vector::data` no longer returns a raw pointer | Yes |  |
2164(i) | C++20 | 23.3.13.5 [vector.modifiers] | What are the semantics of `vector.emplace(vector.begin(), vector.back())`? | Yes | 2 |
3077(i) | C++20 | 23.3.13.5 [vector.modifiers] | `(push|emplace)_back` should invalidate the `end` iterator | Yes | 3 |
2853(i) | C++17 | 23.3.13.5 [vector.modifiers] | Possible inconsistency in specification of `erase` in [vector.modifiers] | Yes | 0 |
2252(i) | C++14 | 23.3.13.5 [vector.modifiers] | Strong guarantee on `vector::push_back()` still broken with C++11? | Yes |  |
247(i) | CD1 | 23.3.13.5 [vector.modifiers] | `vector`, `deque::insert` complexity | Yes |  |
406(i) | CD1 | 23.3.13.5 [vector.modifiers] | vector::insert(s) exception safety | Yes |  |
414(i) | CD1 | 23.3.13.5 [vector.modifiers] | Which iterators are invalidated by v.erase()? | Yes |  |
2256(i) | NAD | 23.3.13.5 [vector.modifiers] | On `vector` iterator invalidation | Yes | 3 |
2449(i) | NAD | 23.3.13.5 [vector.modifiers] | `vector::insert` invalidates `end()`? | Yes | 3 |
4219(i) | Tentatively NAD | 23.3.13.6 [vector.erasure] | `std::vector::erase[_if]` should be based on ranges `remove` | Yes |  |
3638(i) | New | 23.3.14 [vector.bool] | `vector<bool>::swap(reference, reference)` is useless | Yes | 3 |
1422(i) | Open | 23.3.14 [vector.bool] | `vector<bool>` iterators are not random access | No | 3 |
2187(i) | C++14 | 23.3.14 [vector.bool] | `vector<bool>` is missing `emplace` and `emplace_back` member functions | Yes |  |
814(i) | C++11 | 23.3.14 [vector.bool] | `vector<bool>::swap(reference, reference)` not defined | Yes |  |
1254(i) | C++11 | 23.3.14 [vector.bool] | Misleading sentence in `vector<bool>::flip` | Yes |  |
1284(i) | C++11 | 23.3.14 [vector.bool] | `vector<bool> initializer_list` constructor missing an allocator argument | Yes |  |
751(i) | NAD | 23.3.14 [vector.bool] | change pass-by-reference members of `vector<bool>` to pass-by-value? | Yes |  |
4228(i) | Tentatively NAD | 23.3.14.1 [vector.bool.pspc] | Does `vector<bool, Allocator>` mandate that `Allocator::value_type` is `bool`? | No |  |
3778(i) | C++23 | 23.3.14.1 [vector.bool.pspc] | `vector<bool>` missing exception specifications | Yes |  |
4122(i) | New | 23.3.16.1 [inplace.vector.overview] | Ill-formed `operator<=>` can cause hard error when instantiating `std::inplace_vector` | Yes | 2 |
4151(i) | New | 23.3.16.5 [inplace.vector.modifiers] | Precondition of `inplace_vector::swap` | Yes | 2 |
839(i) | Resolved | 23.4 [associative] | Maps and sets missing splice operation | Yes |  |
2012(i) | Resolved | 23.4 [associative] | Associative maps should insert `pair`, not `tuple` | Yes |  |
2161(i) | NAD | 23.4 [associative] | `const` equivalence of `std::map` | Yes | 2 |
1111(i) | NAD Concepts | 23.4 [associative] | associative containers underconstrained | Yes |  |
4223(i) | New | 23.4.1 [associative.general] | Deduction guides for maps are mishandling tuples and references | Yes | 2 |
2059(i) | C++17 | 23.4.3 [map] | C++0x ambiguity problem with `map::erase` | Yes | 3 |
2300(i) | C++14 | 23.4.3 [map] | [CD] Redundant sections for `map` and `multimap` members should be removed | Yes |  |
1423(i) | C++11 | 23.4.3 [map] | `map` constructor accepting an allocator as single parameter should be explicit | Yes |  |
133(i) | TC1 | 23.4.3 [map] | map missing get_allocator() | Yes |  |
140(i) | NAD Editorial | 23.4.3 [map] | map<Key, T>::value_type does not satisfy the assignable requirement | Yes |  |
1296(i) | NAD | 23.4.3 [map] | `map` and `multimap value_compare` overspecified | Yes |  |
4291(i) | Tentatively Ready | 23.4.3.1 [map.overview] | `explicit map(const Allocator&)` should be `constexpr` | Yes |  |
3531(i) | New | 23.4.3.1 [map.overview] | LWG 3025 broke previous valid code | Yes | 3 |
3025(i) | C++20 | 23.4.3.1 [map.overview] | Map-like container deduction guides should use `pair<Key, T>`, not `pair<const Key, T>` | Yes | 2 |
2354(i) | C++17 | 23.4.3.1 [map.overview] | Unnecessary copying when inserting into maps with braced-init syntax | Yes | 2 |
2469(i) | C++17 | 23.4.3.3 [map.access] | Wrong specification of Requires clause of `operator[]` for `map` and `unordered_map` | Yes | 3 |
2007(i) | C++11 | 23.4.3.3 [map.access] | Incorrect specification of return value for `map<>::at()` | Yes |  |
334(i) | CD1 | 23.4.3.3 [map.access] | map::operator[] specification forces inefficient implementation | Yes |  |
703(i) | CD1 | 23.4.3.3 [map.access] | `map::at()` need a complexity specification | Yes |  |
2274(i) | Resolved | 23.4.3.3 [map.access] | Does `map::operator[]` value-initialize or default-insert a missing element? | Yes | 3 |
2464(i) | C++17 | 23.4.3.4 [map.modifiers] | `try_emplace` and `insert_or_assign` misspecified | Yes | 2 |
2571(i) | C++17 | 23.4.3.4 [map.modifiers] | §[map.modifiers]/2 imposes nonsensical requirement on `insert(InputIterator, InputIterator)` | Yes | 0 |
2005(i) | C++14 | 23.4.3.4 [map.modifiers] | `unordered_map::insert(T&&)` protection should apply to `map` too | Yes |  |
1424(i) | C++11 | 23.4.4 [multimap] | `multimap` constructor accepting an allocator as a single parameter should be explicit | Yes |  |
1091(i) | NAD | 23.4.4.3 [multimap.modifiers] | Multimap description confusing | Yes |  |
1425(i) | C++11 | 23.4.6 [set] | `set` constructor accepting an allocator as a single parameter should be explicit | Yes |  |
214(i) | CD1 | 23.4.6 [set] | set::find() missing const overload | Yes |  | 450
450(i) | Dup | 23.4.6 [set] | set::find is inconsistent with associative container requirements | Yes |  | 214
3704(i) | C++23 | 23.4.6.1 [set.overview] | LWG 2059 added overloads that might be ill-formed for sets | Yes |  |
2076(i) | C++17 | 23.4.6.2 [set.cons] | Bad `CopyConstructible` requirement in set constructors | Yes | 3 |
1426(i) | C++11 | 23.4.7 [multiset] | `multiset` constructor accepting an allocator as a single parameter should be explicit | Yes |  |
2713(i) | New | 23.5 [unord] | More missing allocator-extended constructors for unordered containers | Yes | 3 |
2230(i) | C++17 | 23.5 [unord] | "see below" for initializer-list constructors of unordered containers | Yes | 4 |
2050(i) | C++14 | 23.5 [unord] | Unordered associative containers do not use `allocator_traits` to define member types | Yes |  |
676(i) | C++11 | 23.5 [unord] | Moving the unordered containers | Yes |  |
691(i) | CD1 | 23.5 [unord] | const_local_iterator cbegin, cend missing from TR1 | Yes |  |
852(i) | CD1 | 23.5 [unord] | unordered containers `begin(n)` mistakenly `const` | Yes |  |
1248(i) | Resolved | 23.5 [unord] | Equality comparison for unordered containers | Yes |  |
528(i) | NAD | 23.5 [unord] | `const_iterator` `iterator` issue when they are the same type | Yes |  |
2026(i) | NAD | 23.5 [unord] | `hash` should be `std` qualified for unordered container | Yes |  |
1427(i) | C++11 | 23.5.3 [unord.map] | `unordered_map` constructor accepting an allocator as a single parameter should be explicit | Yes |  |
1519(i) | C++11 | 23.5.3 [unord.map] | bucketsize() const only for unordered set | Yes |  |
4292(i) | Tentatively Ready | 23.5.3.1 [unord.map.overview] | Unordered container local iterators should be constexpr iterators | Yes |  |
761(i) | CD1 | 23.5.3.3 [unord.map.elem] | `unordered_map` needs an `at()` member function | Yes |  |
1428(i) | C++11 | 23.5.4 [unord.multimap] | `unordered_multimap` constructor accepting an allocator as a single parameter should be explicit | Yes |  |
1429(i) | C++11 | 23.5.6 [unord.set] | `unordered_set` constructor accepting an allocator as a single parameter should be explicit | Yes |  |
2982(i) | C++20 | 23.5.6.1 [unord.set.overview] | Making `size_type` consistent in associative container deduction guides | Yes | 2 |
1430(i) | C++11 | 23.5.7 [unord.multiset] | `unordered_multiset` constructor accepting an allocator as a single parameter should be explicit | Yes |  |
2566(i) | C++17 | 23.6 [container.adaptors] | Requirements on the first template parameter of container adaptors | Yes | 0 |
2194(i) | C++14 | 23.6 [container.adaptors] | Impossible container requirements for adaptor types | Yes |  |
1199(i) | C++11 | 23.6 [container.adaptors] | Missing extended copy constructor in container adaptors | Yes |  |
1194(i) | C++11 | 23.6 [container.adaptors] | Unintended `queue` constructor | Yes |  |
1198(i) | C++11 | 23.6 [container.adaptors] | Container adaptor swap: member or non-member? | Yes |  |
2915(i) | Resolved | 23.6 [container.adaptors] | The three container adapters should each have a deduction guide | Yes |  |
756(i) | Resolved | 23.6 [container.adaptors] | Container adaptors push | Yes |  |
1421(i) | Resolved | 23.6 [container.adaptors] | Accidental move-only library types due to new core language rules | Yes |  | 1350
3781(i) | C++23 | 23.6.1 [container.adaptors.general] | The exposition-only alias templates `cont-key-type` and `cont-mapped-type` should be removed | Yes |  |
4398(i) | Tentatively Ready | 23.6.2 [queue.syn] | `enable_nonlocking_formatter_optimization` should be disabled for container adaptors | Yes | 2 |
4371(i) | Tentatively NAD | 23.6.3.1 [queue.defn] | Container adaptor's `empty`/`size` should be `noexcept` | Yes |  |
2783(i) | C++20 | 23.6.3.1 [queue.defn] | `stack::emplace()` and `queue::emplace()` should return `decltype(auto)` | Yes | 2 |
3189(i) | New | 23.6.4 [priority.queue] | Missing requirement for `std::priority_queue` | No | 3 |
3506(i) | C++23 | 23.6.4 [priority.queue] | Missing allocator-extended constructors for `priority_queue` | Yes | 3 |
3522(i) | C++23 | 23.6.4 [priority.queue] | Missing requirement on `InputIterator` template parameter for `priority_queue` constructors | Yes |  |
3529(i) | C++23 | 23.6.4 [priority.queue] | `priority_queue(first, last)` should construct `c` with `(first, last)` | Yes |  |
2684(i) | C++17 | 23.6.4 [priority.queue] | priority_queue lacking comparator typedef | Yes | 0 |
2552(i) | NAD | 23.6.4 [priority.queue] | `priority_queue` doesn't work with move-only types | Yes | 3 |
1196(i) | Resolved | 23.6.4.2 [priqueue.cons] | move semantics undefined for priority_queue | Yes |  |
2537(i) | C++17 | 23.6.4.3 [priqueue.cons.alloc] | Constructors for `priority_queue` taking allocators should call `make_heap` | Yes | 0 |
3723(i) | C++23 | 23.6.4.4 [priqueue.members] | `priority_queue::push_range` needs to `append_range` | Yes | 2 |
3161(i) | Open | 23.6.6 [stack] | Container adapters mandate use of `emplace_back` but don't require it | Yes | 3 |
1186(i) | NAD Concepts | 23.6.6 [stack] | Forward list could model a stack | Yes |  |
976(i) | Resolved | 23.6.6.2 [stack.defn] | Class template `std::stack` should be movable | Yes |  |
3959(i) | New | 23.6.8 [flat.map] | Should the comparator of `std::flat_map`/`std::flat_multimap` be copied twice in some operations? | No | 3 |
3802(i) | New | 23.6.8 [flat.map] | `flat_foo` allocator-extended constructors lack move semantics | No | 2 |
3804(i) | New | 23.6.8 [flat.map] | `flat_foo` missing some allocator-extended deduction guides | No | 2 |
4350(i) | LEWG | 23.6.8 [flat.map] | Should flat adaptors use `insert_range` when available? | No | 2 |
3884(i) | WP | 23.6.8 [flat.map] | `flat_foo` is missing allocator-extended copy/move constructors | Yes |  |
3803(i) | C++23 | 23.6.8 [flat.map] | `flat_foo` constructors taking `KeyContainer` lack `KeyCompare` parameter | Yes | 1 |
3966(i) | New | 23.6.8.1 [flat.map.overview] | The `value_type` and `reference` members of `std::flat_(multi)map::(const_)iterator` are unclear | No | 3 |
3816(i) | C++23 | 23.6.8.1 [flat.map.overview] | `flat_map` and `flat_multimap` should impose sequence container requirements | Yes |  |
3963(i) | New | 23.6.8.2 [flat.map.defn] | Different `std::flat_map`/`std::flat_multimap` specializations should be able to share same nested classes | Yes | 3 |
3786(i) | C++23 | 23.6.8.2 [flat.map.defn] | Flat maps' deduction guide needs to default `Allocator` to be useful | Yes | 2 |
4374(i) | New | 23.6.8.7 [flat.map.modifiers] | `flat_meow` range insertion behavior is unclear if in-place merge cannot allocate additional memory | No | 3 |
4000(i) | New | 23.6.8.7 [flat.map.modifiers] | `flat_map::insert_range`'s Effects is not quite right | Yes | 3 |
4239(i) | WP | 23.6.8.7 [flat.map.modifiers] | `flat_map`'s transparent comparator no longer works for string literals | Yes |  |
4352(i) | New | 23.6.9.1 [flat.multimap.overview] | "operations on flat_multimap are equivalent to those of flat_map" | No | 3 |
3774(i) | C++23 | 23.6.10 [flat.set.syn] | `<flat_set>` should include `<compare>` | Yes |  |
4048(i) | New | 23.6.11 [flat.set] | Inconsistent preconditions for transparent insertion of `std::flat_map/std::flat_set` | Yes | 2 |
4384(i) | Tentatively Ready | 23.6.11.2 [flat.set.defn] | `flat_set::erase(iterator)` is underconstrained | Yes |  |
3879(i) | C++23 | 23.6.11.6 [flat.set.erasure] | `erase_if` for `flat_{,multi}set` is incorrectly specified | Yes |  |
4180(i) | New | 23.6.12.5 [flat.multiset.modifiers] | Inconsistent constraints on `flat_foo::emplace` | Yes | 3 |
3881(i) | C++23 | 23.6.13 [container.adaptors.format] | Incorrect formatting of container adapters backed by `std::string` | Yes |  |
4351(i) | Tentatively Ready | 23.7.2.1 [span.syn] | `integral-constant-like` needs more `remove_cvref_t` | Yes |  |
3813(i) | New | 23.7.2.2.1 [span.overview] | `std::span<volatile T, E>` is made ill-formed by P2278R4 when `T` is a normal class type | Yes | 2 |
3203(i) | WP | 23.7.2.2.1 [span.overview] | `span` element access invalidation | Yes | 2 |
3903(i) | WP | 23.7.2.2.1 [span.overview] | `span` destructor is redundantly `noexcept` | Yes |  |
3102(i) | C++20 | 23.7.2.2.1 [span.overview] | Clarify `span iterator` and `const_iterator` behavior | Yes | 0 |
3144(i) | C++20 | 23.7.2.2.1 [span.overview] | `span` does not have a `const_pointer` typedef | Yes | 0 |
3369(i) | C++20 | 23.7.2.2.1 [span.overview] | `span`'s deduction-guide for built-in arrays doesn't work | Yes | 0 |
4397(i) | New | 23.7.2.2.2 [span.cons] | Improve `span(R&& r)` | Yes | 3 |
3100(i) | C++20 | 23.7.2.2.2 [span.cons] | Unnecessary and confusing "empty `span`" wording | Yes | 0 |
3101(i) | C++20 | 23.7.2.2.2 [span.cons] | `span`'s `Container` constructors need another constraint | Yes | 1 |
3198(i) | C++20 | 23.7.2.2.2 [span.cons] | Bad constraint on `std::span::span()` | Yes |  |
3255(i) | C++20 | 23.7.2.2.2 [span.cons] | `span`'s `array` constructor is too strict | Yes | 2 |
3358(i) | C++20 | 23.7.2.2.2 [span.cons] | §[span.cons] is mistaken that `to_address` can throw | Yes | 0 |
4404(i) | Tentatively NAD | 23.7.2.2.3 [span.deduct] | Should `span(R&&)` CTAD apply P2280? | Yes |  |
4293(i) | Tentatively Ready | 23.7.2.2.4 [span.sub] | span::subspan/first/last chooses wrong constructor when T is const-qualified bool | Yes |  |
3103(i) | C++20 | 23.7.2.2.4 [span.sub] | Errors in taking subview of `span` should be ill-formed where possible | Yes | 3 |
4011(i) | WP | 23.7.2.2.6 [span.elem] | "Effects: Equivalent to return" in [span.elem] | Yes |  |
3320(i) | C++20 | 23.7.2.2.7 [span.iterators] | `span::cbegin/cend` methods produce different results than `std::[ranges::]cbegin/cend` | Yes | 0 |
4243(i) | Ready | 23.7.2.3 [span.objectrep] | `as_bytes`/`as_writable_bytes` is broken with `span<volatile T>` | Yes | 4 |
3995(i) | New | 23.7.3 [views.multidim] | Issue with custom index conversion in `<mdspan>` | No | 3 |
4275(i) | Tentatively Ready | 23.7.3.2 [mdspan.syn] | `std::dynamic_extent` should also be defined in `<mdspan>` | Yes | 3 |
3970(i) | WP | 23.7.3.2 [mdspan.syn] | §[mdspan.syn] Missing definition of `full_extent_t` and `full_extent` | Yes |  |
4020(i) | Tentatively Ready | 23.7.3.3.2 [mdspan.extents.expo] | `extents::index-cast` weirdness | Yes |  |
4314(i) | New | 23.7.3.4 [mdspan.layout] | Missing move in `mdspan` layout `mapping::operator()` | Yes | 2 |
4272(i) | New | 23.7.3.4 [mdspan.layout] | For `rank == 0`, `layout_stride` is atypically convertible | Yes | 2 |
3876(i) | C++23 | 23.7.3.4 [mdspan.layout] | Default constructor of `std::layout_XX::mapping` misses precondition | Yes |  |
4217(i) | WP | 23.7.3.4.2 [mdspan.layout.reqmts] | Clarify `mdspan` layout mapping requirements for `rank == 0` | Yes |  |
4266(i) | Tentatively Ready | 23.7.3.4.7 [mdspan.layout.stride] | `layout_stride::mapping` should treat empty mappings as exhaustive | Yes |  |
3861(i) | Resolved | 23.7.3.4.7 [mdspan.layout.stride] | `mdspan` `layout_stride::mapping` default constructor problem | Yes | 1 |
4372(i) | Tentatively Ready | 23.7.3.4.8.1 [mdspan.layout.leftpad.overview] | Weaken Mandates: for dynamic padding values in padded layouts | Yes |  |
4021(i) | New | 23.7.3.6.1 [mdspan.mdspan.overview] | `mdspan::is_always_meow()` should be `noexcept` | Yes | 3 |
4405(i) | New | 23.7.3.6.2 [mdspan.mdspan.cons] | `mdspan` constructor should disallow derived to base conversions | Yes | 3 |
3974(i) | WP | 23.7.3.6.3 [mdspan.mdspan.members] | `mdspan::operator[]` should not copy `OtherIndexTypes` | Yes |  |
4060(i) | WP | 23.7.3.7.7 [mdspan.sub.sub] | `submdspan` preconditions do not forbid creating invalid pointer | Yes |  |

## Section 24 (218 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
3952(i) | New | 24.2 [iterator.synopsis] | `iter_common_reference_t` does not conform to the definition of `indirectly_readable` | Yes | 3 |
3736(i) | C++23 | 24.2 [iterator.synopsis] | `move_iterator` missing `disable_sized_sentinel_for` specialization | Yes |  |
3765(i) | C++23 | 24.2 [iterator.synopsis] | `const_sentinel` should be constrained | Yes |  |
3862(i) | C++23 | 24.2 [iterator.synopsis] | `basic_const_iterator`'s `common_type` specialization is underconstrained | Yes |  |
2061(i) | C++14 | 24.2 [iterator.synopsis] | `make_move_iterator` and arrays | Yes |  |
2128(i) | C++14 | 24.2 [iterator.synopsis] | Absence of global functions `cbegin/cend` | Yes |  |
1320(i) | NAD | 24.2 [iterator.synopsis] | Header for `iter_swap` | Yes |  |
1128(i) | NAD Concepts | 24.2 [iterator.synopsis] | Missing definition of `iterator_traits<T*>` | Yes |  |
1213(i) | Open | 24.3 [iterator.requirements] | Meaning of valid and singular iterator underspecified | No | 4 |
2578(i) | C++17 | 24.3 [iterator.requirements] | Iterator requirements should reference iterator traits | Yes | 3 |
1185(i) | Resolved | 24.3 [iterator.requirements] | Iterator categories and output iterators | Yes |  |
1210(i) | Resolved | 24.3 [iterator.requirements] | Iterator reachability should not require a container | Yes |  |
1212(i) | Resolved | 24.3 [iterator.requirements] | result of post-increment/decrement operator | Yes |  |
408(i) | NAD Editorial | 24.3 [iterator.requirements] | Is `vector<reverse_iterator<char*> >` forbidden? | Yes |  |
446(i) | NAD Editorial | 24.3 [iterator.requirements] | Iterator equality between different containers | Yes |  |
2107(i) | NAD | 24.3 [iterator.requirements] | Some iterator category should guarantee the lifetime of references | Yes |  |
4271(i) | Tentatively NAD | 24.3.1 [iterator.requirements.general] | Caching range views claim amortized amortized 𝒪(1) runtime complexity for algorithms that are in fact 𝒪(n) | Yes |  |
3259(i) | C++20 | 24.3.1 [iterator.requirements.general] | The definition of constexpr iterators should be adjusted | Yes | 0 |
2375(i) | Resolved | 24.3.1 [iterator.requirements.general] | Is [iterator.requirements.general]/9 too broadly applied? | Yes | 3 |
3110(i) | Resolved | 24.3.1 [iterator.requirements.general] | Contiguous Iterators should always be Random-Access | Yes | 3 |
4178(i) | NAD Editorial | 24.3.1 [iterator.requirements.general] | writable is no longer a term of power | Yes |  |
4080(i) | New | 24.3.2 [iterator.assoc.types] | Presumed value and difference types of an iterator type in ranges and non-ranges algorithms | No | 3 |
3838(i) | New | 24.3.2.1 [incrementable.traits] | The last specialization of `incrementable_traits` is under-constrained | Yes | 3 |
3615(i) | New | 24.3.2.1 [incrementable.traits] | The last specialization of `incrementable_traits` has wrong operand types | Yes | 3 |
3446(i) | C++23 | 24.3.2.2 [readable.traits] | `indirectly_readable_traits` ambiguity for types with both `value_type` and `element_type` | Yes | 2 |
3541(i) | C++23 | 24.3.2.2 [readable.traits] | `indirectly_readable_traits` should be SFINAE-friendly for all types | Yes |  |
3287(i) | New | 24.3.2.3 [iterator.traits] | Exposition-only `cpp17-input-iterator` concept is needlessly complex | Yes | 3 |
3420(i) | C++23 | 24.3.2.3 [iterator.traits] | `cpp17-iterator` should check that the type looks like an iterator first | Yes | 0 |
3798(i) | C++23 | 24.3.2.3 [iterator.traits] | Rvalue reference and `iterator_category` | Yes |  |
2952(i) | C++20 | 24.3.2.3 [iterator.traits] | `iterator_traits` should work for pointers to cv `T` | Yes | 0 |
445(i) | CD1 | 24.3.2.3 [iterator.traits] | iterator_traits::reference unspecified for some iterator categories | Yes |  |
3283(i) | Resolved | 24.3.2.3 [iterator.traits] | Types satisfying `input_iterator` but not `equality_comparable` look like C++17 output iterators | Yes | 2 |
3289(i) | Resolved | 24.3.2.3 [iterator.traits] | Cannot opt out of C++17 iterator-ness without also opting out of C++20 iterator-ness | Yes | 2 |
2951(i) | Resolved | 24.3.2.3 [iterator.traits] | `iterator_traits` should SFINAE for `void*` and function pointers | Yes | 3 |
1127(i) | NAD Concepts | 24.3.2.3 [iterator.traits] | rvalue references and iterator traits | Yes |  |
3247(i) | C++20 | 24.3.3.1 [iterator.cust.move] | `ranges::iter_move` should perform ADL-only lookup of `iter_move` | Yes | 2 |
3299(i) | C++20 | 24.3.3.1 [iterator.cust.move] | Pointers don't need customized iterator behavior | Yes | 0 |
765(i) | C++11 | 24.3.4 [iterator.concepts] | More on iterator validity | Yes |  |
198(i) | CD1 | 24.3.4 [iterator.concepts] | Validity of pointers and references unspecified after iterator destruction | Yes |  |
346(i) | CD1 | 24.3.4 [iterator.concepts] | Some iterator member functions should be const | Yes |  |
407(i) | CD1 | 24.3.4 [iterator.concepts] | Can singular iterators be destroyed? | Yes |  |
208(i) | TC1 | 24.3.4 [iterator.concepts] | Unnecessary restriction on past-the-end iterators | Yes |  |
304(i) | NAD | 24.3.4 [iterator.concepts] | Must `*a` return an lvalue when `a` is an input iterator? | Yes |  |
3279(i) | Resolved | 24.3.4.2 [iterator.concept.readable] | `shared_ptr<int>&` does not not satisfy `readable` | Yes | 1 |
3890(i) | New | 24.3.4.4 [iterator.concept.winc] | ABI issue for integer-class types | Yes | 3 |
3467(i) | C++23 | 24.3.4.4 [iterator.concept.winc] | `bool` can't be an integer-like type | Yes | 0 |
3367(i) | C++20 | 24.3.4.4 [iterator.concept.winc] | Integer-class conversions should not throw | Yes | 0 |
3366(i) | Resolved | 24.3.4.4 [iterator.concept.winc] | Narrowing conversions between integer and integer-class types | Yes | 3 |
3376(i) | Resolved | 24.3.4.4 [iterator.concept.winc] | "integer-like class type" is too restrictive | Yes | 3 |
3575(i) | Resolved | 24.3.4.4 [iterator.concept.winc] | `<=>` for integer-class types isn't consistently specified | Yes | 3 |
3183(i) | C++20 | 24.3.4.8 [iterator.concept.sizedsentinel] | Normative permission to specialize Ranges variable templates | Yes | 0 |
3716(i) | New | 24.3.4.11 [iterator.concept.forward] | §[iterator.concept.forward][forward.iterators] Two different definitions of multi-pass guarantee | No | 3 |
3277(i) | C++20 | 24.3.4.13 [iterator.concept.random.access] | Pre-increment on prvalues is not a requirement of `weakly_incrementable` | Yes | 0 |
3284(i) | C++20 | 24.3.4.13 [iterator.concept.random.access] | `random_access_iterator` semantic constraints accidentally promote difference type using unary negate | Yes | 0 |
4170(i) | WP | 24.3.4.14 [iterator.concept.contiguous] | `contiguous_iterator` should require `to_address(I{})` | Yes |  |
3607(i) | C++23 | 24.3.4.14 [iterator.concept.contiguous] | `contiguous_iterator` should not be allowed to have custom `iter_move` and `iter_swap` behavior | Yes |  |
2437(i) | C++17 | 24.3.5.2 [iterator.iterators] | `iterator_traits<OutIt>::reference` can and can't be `void` | Yes | 3 |
1009(i) | NAD | 24.3.5.2 [iterator.iterators] | `InputIterator` post-increment dangerous | Yes |  |
2962(i) | Open | 24.3.5.3 [input.iterators] | Iterators of Containers of move-only types do not model `InputIterator` | Yes | 2 |
484(i) | Open | 24.3.5.3 [input.iterators] | Convertible to `T` | No | 3 |
98(i) | CD1 | 24.3.5.3 [input.iterators] | Input iterator requirements are badly written | Yes |  |
558(i) | NAD Editorial | 24.3.5.3 [input.iterators] | lib.input.iterators Defect | Yes |  |
392(i) | NAD | 24.3.5.3 [input.iterators] | 'equivalence' for input iterators | Yes |  |
493(i) | NAD | 24.3.5.3 [input.iterators] | Undefined Expression in Input Iterator Note Title | Yes |  |
2035(i) | Open | 24.3.5.4 [output.iterators] | Output iterator requirements are broken | Yes | 3 |
2038(i) | Open | 24.3.5.4 [output.iterators] | Missing definition for `incrementable` iterator | No | 3 |
324(i) | CD1 | 24.3.5.4 [output.iterators] | Do output iterators have value types? | Yes |  |
485(i) | Resolved | 24.3.5.4 [output.iterators] | output iterator insufficiently constrained | Yes |  |
200(i) | CD1 | 24.3.5.5 [forward.iterators] | Forward iterator requirements don't allow constant iterators | Yes |  |
478(i) | CD1 | 24.3.5.5 [forward.iterators] | Should forward iterator requirements table have a line for r->m? | Yes |  | 477
1311(i) | Resolved | 24.3.5.5 [forward.iterators] | multi-pass property of Forward Iterator underspecified | Yes |  |
476(i) | NAD | 24.3.5.5 [forward.iterators] | Forward Iterator implied mutability | Yes |  |
477(i) | Dup | 24.3.5.5 [forward.iterators] | Operator-> for const forward iterators | Yes |  | 478
1084(i) | NAD Concepts | 24.3.5.5 [forward.iterators] | Concept `ForwardIterator` should provide default implementation for post-increment | Yes |  |
383(i) | CD1 | 24.3.5.6 [bidirectional.iterators] | Bidirectional iterator assertion typo | Yes |  |
299(i) | NAD Editorial | 24.3.5.6 [bidirectional.iterators] | Incorrect return types for iterator dereference | Yes |  |
1085(i) | NAD Concepts | 24.3.5.6 [bidirectional.iterators] | `BidirectionalIterator` concept should provide default implementation for post-decrement | Yes |  |
3236(i) | C++23 | 24.3.5.7 [random.access.iterators] | Random access iterator requirements lack limiting relational operators domain to comparing those from the same range | Yes | 3 |
2519(i) | C++17 | 24.3.5.7 [random.access.iterators] | Iterator `operator-=` has gratuitous undefined behaviour | Yes | 2 |
1079(i) | C++11 | 24.3.5.7 [random.access.iterators] | UK-265: `RandomAccessIterator`'s `operator-` has nonsensical effects clause | Yes |  |
448(i) | CD1 | 24.3.5.7 [random.access.iterators] | Random Access Iterators over abstract classes | Yes |  |
458(i) | NAD | 24.3.5.7 [random.access.iterators] | 24.1.5 contains unintended limitation for `operator-` | Yes |  |
1010(i) | NAD Concepts | 24.3.5.7 [random.access.iterators] | `operator-=` should use default in concept | Yes |  |
4171(i) | Tentatively NAD | 24.3.6.3 [indirectcallable.indirectinvocable] | P2609R3 breaks code that uses `views::zip` and `get<T>` | No |  |
4270(i) | New | 24.3.6.4 [projected] | Diagnose misuse of `std::projected::operator*` | Yes | 3 |
3859(i) | Resolved | 24.3.6.4 [projected] | `std::projected` cannot handle proxy iterator | Yes | 3 |
3996(i) | NAD | 24.3.6.4 [projected] | `projected<I, identity>` should just be `I` | Yes |  |
3439(i) | New | 24.4.3 [iterator.operations] | "`Distance`" template parameter is underspecified | No | 3 |
3197(i) | New | 24.4.3 [iterator.operations] | `std::prev` should not require `BidirectionalIterator` | Yes | 3 |
4055(i) | New | 24.4.3 [iterator.operations] | §[iterator.operations] `std::distance` is missing a precondition | Yes | 4 |
3344(i) | New | 24.4.3 [iterator.operations] | `advance(i, most-negative)` and `prev(i, most-negative)` | Yes | 3 |
2931(i) | Open | 24.4.3 [iterator.operations] | Missed optimization opportunity with single-argument `std::next` | No | 3 |
2353(i) | C++17 | 24.4.3 [iterator.operations] | `std::next` is over-constrained | Yes | 4 |
1011(i) | C++11 | 24.4.3 [iterator.operations] | `next/prev` wrong iterator type | Yes |  |
940(i) | Resolved | 24.4.3 [iterator.operations] | `std::distance` | Yes |  |
204(i) | NAD | 24.4.3 [iterator.operations] | distance(first, last) when "last" is before "first" | Yes |  |
3306(i) | C++23 | 24.4.4.2 [range.iter.op.advance] | `ranges::advance` violates its preconditions | Yes | 2 |
3453(i) | C++23 | 24.4.4.2 [range.iter.op.advance] | Generic code cannot call `ranges::advance(i, s)` | Yes | 2 |
4303(i) | New | 24.4.4.3 [range.iter.op.distance] | `std::decay_t` in the specification of `ranges::distance` is problematic | Yes | 4 |
4242(i) | WP | 24.4.4.3 [range.iter.op.distance] | `ranges::distance` does not work with volatile iterators | Yes |  |
3392(i) | C++23 | 24.4.4.3 [range.iter.op.distance] | `ranges::distance()` cannot be used on a move-only iterator with a sized sentinel | Yes | 3 |
3664(i) | C++23 | 24.4.4.3 [range.iter.op.distance] | LWG 3392 broke `std::ranges::distance(a, a+3)` | Yes | 2 |
2858(i) | New | 24.5.1 [reverse.iterators] | LWG 2472: actually an incompatibility with C++03 | Yes | 4 |
2285(i) | C++14 | 24.5.1 [reverse.iterators] | `make_reverse_iterator` | Yes |  |
280(i) | CD1 | 24.5.1 [reverse.iterators] | Comparison of reverse_iterator to const reverse_iterator | Yes |  |
2208(i) | Resolved | 24.5.1 [reverse.iterators] | `std::reverse_iterator` should be a literal type | Yes | 3 |
3623(i) | New | 24.5.1.1 [reverse.iterators.general] | Uses of `std::reverse_iterator` with containers should not require manually including `<iterator>` | Yes | 3 |
2595(i) | New | 24.5.1.2 [reverse.iterator] | `reverse_iterator::operator[]`'s return type revisited | Yes | 3 |
2360(i) | C++14 | 24.5.1.2 [reverse.iterator] | `reverse_iterator::operator*()` is unimplementable | Yes | 1 |
235(i) | CD1 | 24.5.1.2 [reverse.iterator] | No specification of default ctor for reverse_iterator | Yes |  |
3602(i) | New | 24.5.1.4 [reverse.iter.cons] | `reverse_iterator`'s converting assignment is overconstrained | Yes | 3 |
1012(i) | C++11 | 24.5.1.4 [reverse.iter.cons] | `reverse_iterator` default ctor should value initialize | Yes |  |
3725(i) | New | 24.5.1.6 [reverse.iter.elem] | `reverse_iterator::operator->` should not use `prev` for non-pointer iterators | Yes | 3 |
2188(i) | C++14 | 24.5.1.6 [reverse.iter.elem] | Reverse iterator does not fully support targets that overload `operator&` | Yes | 1 |
386(i) | CD1 | 24.5.1.6 [reverse.iter.elem] | Reverse iterator's operator[] has impossible return type | Yes |  |
1052(i) | Resolved | 24.5.1.6 [reverse.iter.elem] | `reverse_iterator::operator->` should also support smart pointers | Yes |  | 2775
3726(i) | NAD | 24.5.1.6 [reverse.iter.elem] | `reverse_iterator::operator->` is underconstrained for non-pointer iterators | Yes |  |
3727(i) | NAD | 24.5.1.6 [reverse.iter.elem] | `reverse_iterator`/`common_iterator`'s `operator->` should not require the underlying iterator's `operator->` to be a `const` member function | Yes |  |
1051(i) | NAD | 24.5.1.6 [reverse.iter.elem] | Specify subscript operation return types of `reverse_iterator` and `move_iterator` | Yes |  |
2204(i) | NAD | 24.5.1.6 [reverse.iter.elem] | `reverse_iterator` should not require a second copy of the base iterator | Yes |  |
2347(i) | NAD | 24.5.1.6 [reverse.iter.elem] | `reverse_iterator::operator[]` calls const version of `current[]` | Yes | 2 |
2775(i) | Dup | 24.5.1.6 [reverse.iter.elem] | `reverse_iterator` is does not compile for fancy pointers | Yes |  | 1052
99(i) | NAD | 24.5.1.8 [reverse.iter.cmp] | Reverse_iterator comparisons completely wrong | Yes |  |
685(i) | CD1 | 24.5.1.9 [reverse.iter.nonmember] | reverse_iterator/move_iterator difference has invalid signatures | Yes |  |
2916(i) | NAD | 24.5.2 [insert.iterators] | Insert iterators should each have an instantiation guide to initialize from a container | Yes |  |
100(i) | NAD | 24.5.2 [insert.iterators] | Insert iterators/ostream_iterators overconstrained | Yes |  |
977(i) | NAD | 24.5.2 [insert.iterators] | insert iterators inefficient for expensive to move types | Yes |  |
1062(i) | NAD | 24.5.2 [insert.iterators] | Missing insert_iterator for stacks/queues | Yes |  |
3415(i) | NAD | 24.5.2.2 [back.insert.iterator] | `back_insert_iterator` fails when a container is also its value type | Yes |  |
903(i) | NAD | 24.5.2.2 [back.insert.iterator] | `back_insert_iterator` issue | Yes |  |
2324(i) | C++14 | 24.5.2.2.2 [back.insert.iter.ops] | Insert iterator constructors should use `addressof()` | Yes | 0 |
1334(i) | C++11 | 24.5.2.2.2 [back.insert.iter.ops] | Insert iterators are broken for some proxy containers compared to C++03 | Yes |  |
901(i) | NAD | 24.5.2.4 [insert.iterator] | insert iterators can move from lvalues | Yes |  |
561(i) | CD1 | 24.5.2.4.3 [inserter] | inserter overly generic | Yes |  |
4104(i) | New | 24.5.3 [const.iterators] | `basic_const_iterator<volatile int*>` is not a `contiguous_iterator` | No | 4 |
3986(i) | New | 24.5.3 [const.iterators] | `basic_const_iterator` doesn't work with `optional` | No | 3 |
3988(i) | Open | 24.5.3 [const.iterators] | Should `as_const_view` and `basic_const_iterator` provide `base()`? | Yes | 3 |
3769(i) | C++23 | 24.5.3 [const.iterators] | `basic_const_iterator::operator==` causes infinite constraint recursion | Yes | 1 |
3853(i) | C++23 | 24.5.3 [const.iterators] | `basic_const_iterator<volatile int*>::operator->` is ill-formed | Yes |  |
3872(i) | C++23 | 24.5.3 [const.iterators] | `basic_const_iterator` should have custom `iter_move` | Yes | 3 |
3863(i) | New | 24.5.3.2 [const.iterators.alias] | Is `input_iterator` guaranteed to have `iter_const_reference_t`? | No | 2 |
4253(i) | Tentatively Ready | 24.5.3.3 [const.iterators.iterator] | `basic_const_iterator` should provide `iterator_type` | Yes |  |
4237(i) | New | 24.5.3.3 [const.iterators.iterator] | The standard library iterator adaptor does not handle `iterator_category` correctly | No | 3 |
3858(i) | NAD | 24.5.3.4 [const.iterators.types] | `basic_const_iterator` is too strict to provide `iterator_category` | Yes |  |
4218(i) | New | 24.5.3.5 [const.iterators.ops] | Constraint recursion in `basic_const_iterator`'s relational operators due to ADL + CWG 2369 | Yes | 2 |
3391(i) | C++23 | 24.5.4 [move.iterators] | Problems with `counted_iterator/move_iterator::base() const &` | Yes | 2 |
3593(i) | C++23 | 24.5.4 [move.iterators] | Several iterators' `base() const &` and `lazy_split_view::outer-iterator::value_type::end()` missing `noexcept` | Yes |  |
2106(i) | C++17 | 24.5.4 [move.iterators] | `move_iterator` wrapping iterators returning prvalues | Yes | 3 |
979(i) | NAD Editorial | 24.5.4 [move.iterators] | Bad example | Yes |  |
4125(i) | New | 24.5.4.2 [move.iterator] | `move_iterator`'s default constructor should be constrained | Yes | 3 |
4120(i) | New | 24.5.4.2 [move.iterator] | `move_iterator` should provide `iterator_category` only when it models `forward_iterator` | Yes | 3 |
680(i) | CD1 | 24.5.4.2 [move.iterator] | move_iterator `operator->` return | Yes |  |
1211(i) | Resolved | 24.5.4.2 [move.iterator] | Move iterators should be restricted as input iterators | Yes |  |
3265(i) | C++23 | 24.5.4.4 [move.iter.cons] | `move_iterator`'s conversions are more broken after P1207 | Yes | 2 |
3435(i) | C++23 | 24.5.4.4 [move.iter.cons] | `three_way_comparable_with<reverse_iterator<int*>, reverse_iterator<const int*>>` | Yes | 2 |
4115(i) | New | 24.5.4.6 [move.iter.elem] | `move_iterator::operator*` should have conditional `noexcept` specification | Yes | 4 |
872(i) | C++11 | 24.5.4.6 [move.iter.elem] | `move_iterator::operator[]` has wrong return type | Yes |  |
3293(i) | C++23 | 24.5.4.9 [move.iter.nonmember] | `move_iterator operator+()` has incorrect constraints | Yes | 3 |
3390(i) | C++20 | 24.5.4.9 [move.iter.nonmember] | `make_move_iterator()` cannot be used to construct a `move_iterator` for a move-only iterator | Yes | 0 |
3749(i) | WP | 24.5.5 [iterators.common] | `common_iterator` should handle integer-class difference types | Yes | 2 |
4092(i) | New | 24.5.5.1 [common.iterator] | The monotonic version of `common_iterator::operator==` is underconstrained | Yes | 3 |
3783(i) | New | 24.5.5.1 [common.iterator] | `views::common` may not be a range adaptor object | Yes | 3 |
3574(i) | C++23 | 24.5.5.1 [common.iterator] | `common_iterator` should be completely `constexpr`-able | Yes | 3 |
3385(i) | C++20 | 24.5.5.1 [common.iterator] | `common_iterator` is not sufficiently constrained for non-copyable iterators | Yes | 0 |
3660(i) | C++23 | 24.5.5.2 [common.iter.types] | `iterator_traits<common_iterator>::pointer` should conform to §[iterator.traits] | Yes |  |
3595(i) | C++23 | 24.5.5.4 [common.iter.access] | Exposition-only classes `proxy` and `postfix-proxy` for `common_iterator` should be fully `constexpr` | Yes |  |
3672(i) | C++23 | 24.5.5.4 [common.iter.access] | `common_iterator::operator->()` should return by value | Yes |  |
3546(i) | C++23 | 24.5.5.5 [common.iter.nav] | `common_iterator`'s `postfix-proxy` is not quite right | Yes |  |
3601(i) | C++23 | 24.5.5.5 [common.iter.nav] | `common_iterator`'s `postfix-proxy` needs `indirectly_readable` | Yes |  |
3748(i) | New | 24.5.5.6 [common.iter.cmp] | `common_iterator` and `counted_iterator`' `operator-` are missing cast to return type | Yes | 3 |
3953(i) | WP | 24.5.5.7 [common.iter.cust] | `iter_move` for `common_iterator` and `counted_iterator` should return `decltype(auto)` | Yes |  |
3472(i) | C++23 | 24.5.7 [iterators.counted] | `counted_iterator` is missing preconditions | Yes |  |
4245(i) | WP | 24.5.7.1 [counted.iterator] | Operators that interact with `counted_iterator` and `default_sentinel_t` should be `noexcept` | Yes |  |
3543(i) | C++23 | 24.5.7.1 [counted.iterator] | Definition of when `counted_iterators` refer to the same sequence isn't quite right | Yes |  |
3408(i) | Resolved | 24.5.7.1 [counted.iterator] | LWG 3291 reveals deficiencies in `counted_iterator` | Yes | 2 |
3389(i) | C++20 | 24.5.7.2 [counted.iter.const] | A move-only iterator still does not have a `counted_iterator` | Yes | 0 |
3643(i) | C++23 | 24.5.7.5 [counted.iter.nav] | Missing `constexpr` in `std::counted_iterator` | Yes |  |
2576(i) | C++17 | 24.6 [stream.iterators] | `istream_iterator` and `ostream_iterator` should use `std::addressof` | Yes | 0 |
1086(i) | NAD Concepts | 24.6 [stream.iterators] | Stream iterators need to be concept-constrained templates | Yes |  |
788(i) | C++11 | 24.6.2 [istream.iterator] | Ambiguity in [istream.iterator] | Yes |  |
838(i) | C++11 | 24.6.2 [istream.iterator] | Can an end-of-stream iterator become a non-end-of-stream one? | Yes |  |
245(i) | NAD | 24.6.2 [istream.iterator] | Which operations on `istream_iterator` trigger input operations? | Yes |  |
3600(i) | C++23 | 24.6.2.2 [istream.iterator.cons] | Making `istream_iterator` copy constructor trivial is an ABI break | Yes | 3 |
2793(i) | C++17 | 24.6.2.2 [istream.iterator.cons] | Awkward conflation of trivial special members of `istream_iterator` | Yes |  |
2878(i) | C++17 | 24.6.2.2 [istream.iterator.cons] | Missing `DefaultConstructible` requirement for `istream_iterator` default constructor | Yes |  |
2804(i) | C++17 | 24.6.2.2 [istream.iterator.cons] | Unconditional `constexpr` default constructor for `istream_iterator` | Yes | 0 |
1280(i) | C++11 | 24.6.2.2 [istream.iterator.cons] | Initialization of stream iterators | Yes |  |
1129(i) | Resolved | 24.6.2.2 [istream.iterator.cons] | `istream(buf)_iterator` should support literal sentinel value | Yes |  |
260(i) | CD1 | 24.6.2.3 [istream.iterator.ops] | Inconsistent return type of `istream_iterator::operator++(int)` | Yes |  |
261(i) | CD1 | 24.6.2.3 [istream.iterator.ops] | Missing description of `istream_iterator::operator!=` | Yes |  |
349(i) | CD1 | 24.6.3 [ostream.iterator] | Minor typographical error in ostream_iterator | Yes |  |
1125(i) | NAD | 24.6.3.3 [ostream.iterator.ops] | ostream_iterator does not work with movable types | Yes |  |
2366(i) | New | 24.6.4 [istreambuf.iterator] | `istreambuf_iterator` end-of-stream equality | Yes | 3 |
3107(i) | New | 24.6.4 [istreambuf.iterator] | `istreambuf_iterator` has public exposition-only member | Yes | 4 |
3188(i) | New | 24.6.4 [istreambuf.iterator] | `istreambuf_iterator::pointer` should not be unspecified | Yes | 3 |
2790(i) | C++17 | 24.6.4 [istreambuf.iterator] | Missing specification of `istreambuf_iterator::operator->` | Yes | 3 |
659(i) | C++11 | 24.6.4 [istreambuf.iterator] | `istreambuf_iterator` should have an `operator->()` | Yes |  |
110(i) | TC1 | 24.6.4 [istreambuf.iterator] | istreambuf_iterator::equal not const | Yes |  |
3108(i) | New | 24.6.4.2 [istreambuf.iterator.proxy] | `istreambuf_iterator::proxy::operator*` should be `const` | Yes | 3 |
2544(i) | C++17 | 24.6.4.3 [istreambuf.iterator.cons] | `istreambuf_iterator(basic_streambuf<charT, traits>* s)` effects unclear when `s` is `0` | Yes | 3 |
1126(i) | C++11 | 24.6.4.4 [istreambuf.iterator.ops] | `istreambuff_iterator::equal` needs a const & parameter | Yes |  |
39(i) | TC1 | 24.6.4.4 [istreambuf.iterator.ops] | istreambuf_iterator<>::operator++(int) definition garbled | Yes |  |
111(i) | NAD | 24.6.4.4 [istreambuf.iterator.ops] | `istreambuf_iterator::equal` overspecified, inefficient | Yes |  |
112(i) | TC1 | 24.6.5.2 [ostreambuf.iter.cons] | Minor typo in `ostreambuf_iterator` constructor | Yes |  |
4385(i) | New | 24.7 [iterator.range] | Including `<simd>` doesn't provide `std::begin/end` | Yes | 3 |
3537(i) | New | 24.7 [iterator.range] | §[iterator.range] Missing `noexcept` for `std::rbegin`/`rend` for arrays and `initializer_list` | No | 3 |
4181(i) | New | 24.7 [iterator.range] | Some ranges have negative `ssize` | No | 3 |
4131(i) | New | 24.7 [iterator.range] | Including `<optional>` doesn't provide `std::begin/end` | Yes | 3 |
4387(i) | Open | 24.7 [iterator.range] | Including `<stacktrace>` doesn't provide `std::begin/end` | Yes | 3 |
4234(i) | WP | 24.7 [iterator.range] | Including `<hive>` doesn't provide `std::begin/end` | Yes |  |
3987(i) | WP | 24.7 [iterator.range] | Including `<flat_foo>` doesn't provide `std::begin/end` | Yes |  |
3009(i) | C++20 | 24.7 [iterator.range] | Including `<string_view>` doesn't provide `std::size/empty/data` | Yes | 0 |
3208(i) | C++20 | 24.7 [iterator.range] | `Boolean`'s expression requirements are ordered inconsistently | Yes | 0 |
3300(i) | C++20 | 24.7 [iterator.range] | Non-array `ssize` overload is underconstrained | Yes | 3 |
2812(i) | C++17 | 24.7 [iterator.range] | Range access is available with `<string_view>` | Yes | 0 |
2280(i) | C++14 | 24.7 [iterator.range] | `begin/end` for arrays should be `constexpr` and `noexcept` | Yes |  |
2457(i) | NAD | 24.7 [iterator.range] | `std::begin()` and `std::end()` do not support multi-dimensional arrays correctly | Yes | 3 |
3207(i) | NAD | 24.7 [iterator.range] | `N` in `ssize(const T (&)[N])` should be `size_t` | Yes |  |

## Section 25 (246 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
4307(i) | New | 25.2 [ranges.syn] | Make good use of `sized-random-access-range` and `bidirectional-common` in `<ranges>` | Yes | 4 |
3729(i) | New | 25.2 [ranges.syn] | `std::tuple_element_t<std::ranges::subrange<I, S, K>>` should remove top-level cv-qualifiers | Yes | 4 |
4027(i) | WP | 25.2 [ranges.syn] | `possibly-const-range` should prefer returning `const R&` | Yes | 2 |
3914(i) | WP | 25.2 [ranges.syn] | Inconsistent template-head of `ranges::enumerate_view` | Yes |  |
3946(i) | WP | 25.2 [ranges.syn] | The definition of `const_iterator_t` should be reworked | Yes |  |
3948(i) | WP | 25.2 [ranges.syn] | `possibly-const-range` and `as-const-pointer` should be `noexcept` | Yes |  |
3770(i) | C++23 | 25.2 [ranges.syn] | `const_sentinel_t` is missing | Yes | 3 |
3860(i) | C++23 | 25.2 [ranges.syn] | `range_common_reference_t` is missing | Yes |  |
3302(i) | C++20 | 25.2 [ranges.syn] | Range adaptor objects `keys` and `values` are unspecified | Yes | 1 |
3335(i) | C++20 | 25.2 [ranges.syn] | Resolve C++20 NB comments US 273 and GB 274 | Yes | 1 |
3351(i) | C++20 | 25.2 [ranges.syn] | `ranges::enable_safe_range` should not be constrained | Yes | 0 |
3379(i) | C++20 | 25.2 [ranges.syn] | "`safe`" in several library names is misleading | Yes | 1 |
3398(i) | C++20 | 25.2 [ranges.syn] | `tuple_element_t` is also wrong for `const subrange` | Yes | 0 |
3913(i) | NAD | 25.2 [ranges.syn] | `ranges::const_iterator_t<range R>` fails to accept arrays of unknown bound | Yes | 3 |
3768(i) | NAD | 25.2 [ranges.syn] | `possibly-const-range` is overconstrained | Yes |  |
4184(i) | Tentatively NAD | 25.3 [range.access] | Domain of `ranges::cmeow` doesn't match `ranges::meow` | No |  |
3258(i) | Resolved | 25.3.2 [range.access.begin] | Range access and `initializer_list` | Yes | 3 |
3333(i) | NAD | 25.3.4 [range.access.cbegin] | `ranges::cbegin/ranges::cend`, (and maybe `ranges::crbegin/ranges::crend`) are under-specified to allow rvalue-arrays | Yes |  |
3368(i) | Resolved | 25.3.10 [range.prim.size] | Exactly when does `size` return `end - begin`? | Yes | 0 |
3403(i) | C++23 | 25.3.11 [range.prim.ssize] | Domain of `ranges::ssize(E)` doesn't match `ranges::size(E)` | Yes | 2 |
4062(i) | New | 25.3.13 [range.prim.empty] | `ranges::empty` has no semantic requirements for `forward_range`s | No | 3 |
4389(i) | SG9 | 25.4.2 [range.range] | `ranges::for_each` possibly behaves differently from range-based `for` | Yes | 2 |
3915(i) | WP | 25.4.2 [range.range] | Redundant paragraph about expression variations | Yes |  |
3361(i) | C++23 | 25.4.2 [range.range] | `safe_range<SomeRange&>` case | Yes | 3 |
3559(i) | C++23 | 25.4.4 [range.sized] | Semantic requirements of `sized_range` is circular | Yes |  |
3264(i) | C++20 | 25.4.4 [range.sized] | `sized_range` and `ranges::size` redundantly use `disable_sized_range` | Yes | 1 |
3982(i) | Tentatively NAD | 25.4.5 [range.view] | `is-derived-from-view-interface` should require that `T` is derived from `view_interface<T>` | Yes |  |
3326(i) | C++20 | 25.4.5 [range.view] | `enable_view` has false positives | Yes | 0 |
3452(i) | Resolved | 25.4.5 [range.view] | Are views really supposed to have strict `𝒪(1)` destruction? | Yes | 2 |
3896(i) | New | 25.4.6 [range.refinements] | The definition of `viewable_range` is not quite right | Yes | 4 |
3481(i) | C++23 | 25.4.6 [range.refinements] | `viewable_range` mishandles lvalue move-only views | Yes | 2 |
3375(i) | C++20 | 25.4.6 [range.refinements] | `decay` in `viewable_range` should be `remove_cvref` | Yes | 0 |
3381(i) | C++20 | 25.4.6 [range.refinements] | `begin` and `data` must agree for `contiguous_range` | Yes | 0 |
4112(i) | WP | 25.5.2 [range.utility.helpers] | `has-arrow` should required `operator->()` to be `const`-qualified | Yes |  |
4003(i) | Tentatively NAD | 25.5.3 [view.interface] | `view_interface::back` is overconstrained | Yes |  |
3549(i) | C++23 | 25.5.3 [view.interface] | `view_interface` is overspecified to derive from `view_base` | Yes | 2 |
3646(i) | C++23 | 25.5.3.1 [view.interface.general] | `std::ranges::view_interface::size` returns a signed type | Yes | 3 |
3715(i) | C++23 | 25.5.3.1 [view.interface.general] | `view_interface::empty` is overconstrained | Yes |  |
3766(i) | C++23 | 25.5.3.1 [view.interface.general] | `view_interface::cbegin` is underconstrained | Yes | 2 |
3404(i) | C++23 | 25.5.4 [range.subrange] | Finish removing `subrange`'s conversions from `pair-like` | Yes | 0 |
3470(i) | C++23 | 25.5.4 [range.subrange] | `convertible-to-non-slicing` seems to reject valid case | Yes | 3 |
3589(i) | C++23 | 25.5.4 [range.subrange] | The `const` lvalue reference overload of `get` for `subrange` does not constrain `I` to be `copyable` when `N == 0` | Yes | 3 |
3281(i) | C++20 | 25.5.4 [range.subrange] | Conversion from `pair-like` types to `subrange` is a silent semantic promotion | Yes | 1 |
3282(i) | C++20 | 25.5.4 [range.subrange] | `subrange` converting constructor should disallow derived to base conversions | Yes | 1 |
4183(i) | New | 25.5.4.1 [range.subrange.general] | `subrange` should provide `data()` | Yes | 4 |
3179(i) | C++20 | 25.5.4.2 [range.subrange.ctor] | `subrange` should always model `Range` | Yes | 0 |
4010(i) | New | 25.5.4.3 [range.subrange.access] | `subrange::advance` should be improved | Yes | 3 |
3433(i) | C++23 | 25.5.4.3 [range.subrange.access] | `subrange::advance(n)` has UB when `n < 0` | Yes | 2 |
3551(i) | C++23 | 25.5.5 [range.dangling] | `borrowed_{iterator,subrange}_t` are overspecified | Yes |  |
4016(i) | WP | 25.5.7 [range.utility.conv] | `container-insertable` checks do not match what `container-inserter` does | Yes |  |
4121(i) | New | 25.5.7.1 [range.utility.conv.general] | `ranges::to` constructs associative containers via `c.emplace(c.end(), *it)` | Yes | 2 |
4229(i) | Tentatively NAD | 25.5.7.2 [range.utility.conv.to] | `std::ranges::to` with union return type | Yes |  |
3958(i) | Tentatively NAD | 25.5.7.2 [range.utility.conv.to] | `ranges::to` should prioritize the "`reserve`" branch | Yes |  |
4066(i) | New | 25.5.7.2 [range.utility.conv.to] | `ranges::to` should reserve when `sized_sentinel_for` is satisfied | Yes | 4 |
4381(i) | New | 25.5.7.2 [range.utility.conv.to] | `std::ranges::to specification` using CTAD not supported by core language | Yes | 2 |
3722(i) | New | 25.5.7.2 [range.utility.conv.to] | `ranges::to` `reserve`s the wrong size | Yes | 4 |
4008(i) | New | 25.5.7.2 [range.utility.conv.to] | §[range.utility.conv.to] `ranges::to` may cause infinite recursion if `range_value_t<C>` is a non-move-constructible range | Yes | 3 |
4018(i) | New | 25.5.7.2 [range.utility.conv.to] | `ranges::to`'s copy branch is underconstrained | Yes | 3 |
3845(i) | New | 25.5.7.2 [range.utility.conv.to] | `ranges::to`'s `from_range_t` tag branch has the wrong constraint | Yes | 4 |
3985(i) | New | 25.5.7.2 [range.utility.conv.to] | `ranges::to` should Mandates `C` not to be view | Yes | 3 |
3984(i) | WP | 25.5.7.2 [range.utility.conv.to] | `ranges::to`'s recursion branch may be ill-formed | Yes | 3 |
3733(i) | C++23 | 25.5.7.2 [range.utility.conv.to] | `ranges::to` misuses `cpp17-input-iterator` | Yes | 2 |
3743(i) | C++23 | 25.5.7.2 [range.utility.conv.to] | `ranges::to`'s `reserve` may be ill-formed | Yes |  |
3785(i) | C++23 | 25.5.7.2 [range.utility.conv.to] | `ranges::to` is over-constrained on the destination type being a range | Yes |  |
3847(i) | C++23 | 25.5.7.2 [range.utility.conv.to] | `ranges::to` can still return views | Yes | 2 |
3787(i) | Resolved | 25.5.7.2 [range.utility.conv.to] | `ranges::to`'s template parameter `C` should not be a reference type | Yes | 3 |
3983(i) | New | 25.5.7.3 [range.utility.conv.adaptors] | `ranges::to` adaptors are underconstrained | Yes | 3 |
3907(i) | New | 25.6 [range.factories] | Can iterator types of range adaptors and range factories be SCARY? | No | 3 |
4035(i) | WP | 25.6.3.2 [range.single.view] | `single_view` should provide `empty` | Yes |  |
3428(i) | C++23 | 25.6.3.2 [range.single.view] | `single_view`'s in place constructor should be explicit | Yes | 0 |
4417(i) | New | 25.6.4.1 [range.iota.overview] | `views::indices` is underconstrained | Yes |  |
4096(i) | WP | 25.6.4.1 [range.iota.overview] | `views::iota(views::iota(0))` should be rejected | Yes |  |
3614(i) | New | 25.6.4.2 [range.iota.view] | `iota_view::size` and the most negative signed integer values | Yes | 3 |
4001(i) | WP | 25.6.4.2 [range.iota.view] | `iota_view` should provide `empty` | Yes |  |
3523(i) | C++23 | 25.6.4.2 [range.iota.view] | `iota_view::sentinel` is not always `iota_view`'s sentinel | Yes |  |
3597(i) | C++23 | 25.6.4.2 [range.iota.view] | Unsigned integer types don't model `advanceable` | Yes | 3 |
3610(i) | C++23 | 25.6.4.2 [range.iota.view] | `iota_view::size` sometimes rejects integer-class types | Yes |  |
3292(i) | C++20 | 25.6.4.2 [range.iota.view] | `iota_view` is under-constrained | Yes |  |
4002(i) | New | 25.6.4.3 [range.iota.iterator] | The definition of `iota_view::iterator::iterator_concept` should be improved | Yes | 3 |
3846(i) | New | 25.6.4.3 [range.iota.iterator] | `iota_view::iterator::operator-` is overconstrained | Yes | 3 |
3580(i) | C++23 | 25.6.4.3 [range.iota.iterator] | `iota_view's iterator`'s binary `operator+` should be improved | Yes |  |
3670(i) | C++23 | 25.6.4.3 [range.iota.iterator] | Cpp17InputIterators don't have integer-class difference types | Yes |  |
3291(i) | C++20 | 25.6.4.3 [range.iota.iterator] | `iota_view::iterator` has the wrong `iterator_category` | Yes | 0 |
3388(i) | C++20 | 25.6.4.3 [range.iota.iterator] | `view` iterator types have ill-formed `<=>` operators | Yes | 0 |
3609(i) | New | 25.6.4.4 [range.iota.sentinel] | `std::ranges::iota_view<int, long>` has non-subtractable `iterator` and `sentinel` types | Yes | 3 |
3875(i) | C++23 | 25.6.5 [range.repeat] | `std::ranges::repeat_view<T, IntegerClass>::iterator` may be ill-formed | Yes |  |
4054(i) | WP | 25.6.5.1 [range.repeat.overview] | Repeating a `repeat_view` should repeat the view | Yes |  |
3955(i) | New | 25.6.5.2 [range.repeat.view] | Add `noexcept` to several `repeat_view[::iterator]` member functions | Yes | 3 |
4053(i) | WP | 25.6.5.2 [range.repeat.view] | Unary call to `std::views::repeat` does not decay the argument | Yes |  |
3772(i) | C++23 | 25.6.5.2 [range.repeat.view] | `repeat_view`'s piecewise constructor is missing Postconditions | Yes | 2 |
3796(i) | C++23 | 25.6.5.2 [range.repeat.view] | `movable-box` as member should use default-initialization instead of copy-initialization | Yes |  |
3763(i) | New | 25.6.5.3 [range.repeat.iterator] | Should range adaptor iterators only provide `iterator_category` when its `difference_type` is not an integer-class type? | Yes | 3 |
3679(i) | LEWG | 25.6.6 [range.istream] | Is `<ranges>` sufficient for `istream_view`? | No | 3 |
3568(i) | C++23 | 25.6.6.2 [range.istream.view] | `basic_istream_view` needs to initialize `value_` | Yes |  |
3489(i) | New | 25.6.6.3 [range.istream.iterator] | Improve `istream_view` wording | Yes | 3 |
3397(i) | C++20 | 25.6.6.3 [range.istream.iterator] | `ranges::basic_istream_view::iterator` should not provide `iterator_category` | Yes | 1 |
3394(i) | NAD | 25.6.6.3 [range.istream.iterator] | `ranges::basic_istream_view::iterator` has an empty `iterator_traits` | Yes | 2 |
3524(i) | Resolved | 25.7 [range.adaptors] | Unimplementable narrowing and evaluation order requirements for range adaptors | Yes | 3 |
3981(i) | Tentatively NAD | 25.7.2 [range.adaptor.object] | Range adaptor closure object is underspecified for its return type | Yes |  |
3994(i) | New | 25.7.2 [range.adaptor.object] | `adaptor(args...)(r)` is not equivalent to `std::bind_back(adaptor, args...)(r)` | No | 4 |
3509(i) | Resolved | 25.7.2 [range.adaptor.object] | Range adaptor objects are underspecified | Yes | 2 |
3477(i) | C++23 | 25.7.3 [range.move.wrap] | Simplify constraints for `semiregular-box` | Yes | 0 |
3572(i) | C++23 | 25.7.3 [range.move.wrap] | `copyable-box` should be fully `constexpr` | Yes |  |
3479(i) | Resolved | 25.7.3 [range.move.wrap] | `semiregular-box` mishandles self-assignment | Yes | 3 |
3173(i) | C++20 | 25.7.6.2 [range.ref.view] | Enable CTAD for `ref-view` | Yes | 0 |
4099(i) | New | 25.7.7.1 [range.as.rvalue.overview] | The simple case of `views::as_rvalue` and `views::common` are not strictly correct | Yes | 4 |
4083(i) | WP | 25.7.7.1 [range.as.rvalue.overview] | `views::as_rvalue` should reject non-input ranges | Yes |  |
3829(i) | New | 25.7.7.2 [range.as.rvalue.view] | `as_rvalue_view::end` should improve non-common case | Yes | 3 |
3280(i) | C++20 | 25.7.8.2 [range.filter.view] | View converting constructors can cause constraint recursion and are unneeded | Yes | 1 |
3533(i) | C++23 | 25.7.8.3 [range.filter.iterator] | Make `base() const &` consistent across iterator wrappers that supports `input_iterator`s | Yes |  |
3325(i) | C++20 | 25.7.9.2 [range.transform.view] | Constrain return type of transformation function for `transform_view` | Yes | 0 |
3483(i) | C++23 | 25.7.9.3 [range.transform.iterator] | `transform_view::iterator`'s difference is overconstrained | Yes | 0 |
3520(i) | C++23 | 25.7.9.3 [range.transform.iterator] | `iter_move` and `iter_swap` are inconsistent for `transform_view::iterator` | Yes | 2 |
3555(i) | C++23 | 25.7.9.3 [range.transform.iterator] | `{transform,elements}_view::iterator::iterator_concept` should consider const-qualification of the underlying range | Yes |  |
3564(i) | C++23 | 25.7.9.3 [range.transform.iterator] | `transform_view::iterator<true>::value_type` and `iterator_category` should use `const F&` | Yes | 2 |
3618(i) | C++23 | 25.7.9.3 [range.transform.iterator] | Unnecessary `iter_move` for `transform_view::iterator` | Yes |  |
3301(i) | C++20 | 25.7.9.3 [range.transform.iterator] | `transform_view::iterator` has incorrect `iterator_category` | Yes | 1 |
3448(i) | C++23 | 25.7.9.4 [range.transform.sentinel] | `transform_view`'s `sentinel<false>` not comparable with `iterator<true>` | Yes | 1 |
3384(i) | C++20 | 25.7.9.4 [range.transform.sentinel] | `transform_view::sentinel` has an incorrect `operator-` | Yes | 0 |
4050(i) | Tentatively NAD | 25.7.10.1 [range.take.overview] | Should `views::iota(0) | views::take(5)` be `views::iota(0, 5)`? | Yes |  |
4214(i) | New | 25.7.10.1 [range.take.overview] | Missing Preconditions for `take`/`drop` adaptor | Yes | 3 |
3407(i) | C++23 | 25.7.10.1 [range.take.overview] | Some problems with the wording changes of P1739R4 | Yes | 2 |
3447(i) | C++23 | 25.7.10.2 [range.take.view] | Deduction guides for `take_view` and `drop_view` have different constraints | Yes | 0 |
3738(i) | C++23 | 25.7.10.2 [range.take.view] | Missing preconditions for `take_view` constructor | Yes |  |
3286(i) | C++20 | 25.7.10.2 [range.take.view] | `ranges::size` is not required to be valid after a call to `ranges::begin` on an input range | Yes | 0 |
3449(i) | C++23 | 25.7.10.3 [range.take.sentinel] | `take_view` and `take_while_view`'s `sentinel<false>` not comparable with their const iterator | Yes | 1 |
3737(i) | C++23 | 25.7.10.3 [range.take.sentinel] | `take_view::sentinel` should provide `operator-` | Yes | 3 |
3450(i) | C++23 | 25.7.11.2 [range.take.while.view] | The `const` overloads of `take_while_view::begin/end` are underconstrained | Yes | 0 |
3364(i) | C++20 | 25.7.11.2 [range.take.while.view] | Initialize data members of ranges and their iterators | Yes | 0 |
3298(i) | NAD | 25.7.11.2 [range.take.while.view] | Range adaptors introduced by P1035 do not require `viewable_range` | Yes |  |
3708(i) | C++23 | 25.7.11.3 [range.take.while.sentinel] | `take_while_view::sentinel`'s conversion constructor should move | Yes |  |
4009(i) | Tentatively NAD | 25.7.12.2 [range.drop.view] | `drop_view::begin const` may have 𝒪(n) complexity | Yes | 3 |
3730(i) | New | 25.7.12.2 [range.drop.view] | `std::ranges::drop_view` may have different size type from its underlying view | Yes | 3 |
3482(i) | C++23 | 25.7.12.2 [range.drop.view] | `drop_view`'s `const begin` should additionally require `sized_range` | Yes | 0 |
3490(i) | C++23 | 25.7.13.2 [range.drop.while.view] | `ranges::drop_while_view::begin()` is missing a precondition | Yes | 0 |
3363(i) | C++20 | 25.7.13.2 [range.drop.while.view] | `drop_while_view` should opt-out of `sized_range` | Yes | 1 |
3666(i) | New | 25.7.14 [range.join] | `join_view`'s difference type is too small | No | 2 |
3474(i) | C++23 | 25.7.14 [range.join] | Nesting `join_view`s is broken because of CTAD | Yes |  |
4220(i) | New | 25.7.14.2 [range.join.view] | `join_view` incorrectly stores inner range | Yes | 3 |
4401(i) | LEWG | 25.7.14.2 [range.join.view] | `join_view` should be `sized_range` when applied to ranges of `simd::vec` | Yes | 3 |
3700(i) | Resolved | 25.7.14.2 [range.join.view] | The `const begin` of the `join_view` family does not require `InnerRng` to be a range | Yes | 3 |
3322(i) | Resolved | 25.7.14.2 [range.join.view] | Add `join_view::base()` member function | Yes | 0 |
3278(i) | Resolved | 25.7.14.2 [range.join.view] | `join_view<V>::iterator<true>` tries to write through `const join_view` ptr | Yes | 2 |
3500(i) | C++23 | 25.7.14.3 [range.join.iterator] | `join_view::iterator::operator->()` is bogus | Yes | 0 |
3517(i) | C++23 | 25.7.14.3 [range.join.iterator] | `join_view::iterator`'s `iter_swap` is underconstrained | Yes |  |
3535(i) | C++23 | 25.7.14.3 [range.join.iterator] | `join_view::iterator::iterator_category` and `::iterator_concept` lie | Yes | 2 |
3569(i) | C++23 | 25.7.14.3 [range.join.iterator] | `join_view` fails to support ranges of ranges with non-`default_initializable` iterators | Yes | 3 |
3313(i) | C++20 | 25.7.14.3 [range.join.iterator] | `join_view::iterator::operator--` is incorrectly constrained | Yes | 0 |
3791(i) | Resolved | 25.7.14.3 [range.join.iterator] | `join_view::iterator::operator--` may be ill-formed | Yes | 3 |
3365(i) | NAD | 25.7.14.3 [range.join.iterator] | Rename ref-is-glvalue to deref-is-ref | Yes | 0 |
3873(i) | New | 25.7.15.2 [range.join.with.view] | `join_with_view`'s `const begin` is underconstrained | No | 3 |
4074(i) | WP | 25.7.15.2 [range.join.with.view] | `compatible-joinable-ranges` is underconstrained | Yes |  |
3971(i) | NAD | 25.7.15.2 [range.join.with.view] | Join ranges of rvalue references with ranges of prvalues | Yes | 3 |
4059(i) | New | 25.7.15.3 [range.join.with.iterator] | Leaky abstraction in `join_with_view`'s iterator | Yes | 3 |
3852(i) | New | 25.7.15.3 [range.join.with.iterator] | `join_with_view::iterator`'s `iter_move` and `iter_swap` should be conditionally `noexcept` | Yes | 3 |
3972(i) | New | 25.7.15.3 [range.join.with.iterator] | Issues with `join_with_view::iterator`'s `iter_swap` | No | 2 |
3855(i) | New | 25.7.16.2 [range.lazy.split.view] | `tiny-range` is not quite right | Yes | 4 |
3685(i) | New | 25.7.16.2 [range.lazy.split.view] | In `lazy_split_view`, CTAD doesn't work when given an `input_range` input and a `tiny-range` pattern | Yes | 3 |
3599(i) | New | 25.7.16.2 [range.lazy.split.view] | The `const` overload of `lazy_split_view::begin` should be constrained by `const Pattern` | Yes | 3 |
4108(i) | SG9 | 25.7.16.2 [range.lazy.split.view] | `lazy_split_view` should be `sized_range` when pattern is empty `tiny-range` | Yes | 4 |
3592(i) | C++23 | 25.7.16.2 [range.lazy.split.view] | `lazy_split_view` needs to check the simpleness of `Pattern` | Yes |  |
4249(i) | New | 25.7.16.3 [range.lazy.split.outer] | The past end issue for `lazy_split_view` | Yes | 2 |
3686(i) | New | 25.7.16.3 [range.lazy.split.outer] | In `lazy_split_view`, comparing a default-constructed `outer-iterator` or `inner-iterator` with `std::default_sentinel` results in null pointer dereference | Yes | 3 |
3904(i) | WP | 25.7.16.3 [range.lazy.split.outer] | `lazy_split_view::outer-iterator`'s `const`-converting constructor isn't setting `trailing_empty_` | Yes |  |
3505(i) | C++23 | 25.7.16.3 [range.lazy.split.outer] | `split_view::outer-iterator::operator++` misspecified | Yes | 2 |
3181(i) | NAD | 25.7.16.3 [range.lazy.split.outer] | `split_view::outer_iterator` converting constructor is misconstrained | Yes |  |
4013(i) | WP | 25.7.16.4 [range.lazy.split.outer.value] | `lazy_split_view::outer-iterator::value_type` should not provide default constructor | Yes |  |
3553(i) | C++23 | 25.7.16.4 [range.lazy.split.outer.value] | Useless constraint in `split_view::outer-iterator::value_type::begin()` | Yes |  |
3276(i) | C++20 | 25.7.16.4 [range.lazy.split.outer.value] | Class `split_view::outer_iterator::value_type` should inherit from `view_interface` | Yes | 0 |
3532(i) | C++23 | 25.7.16.5 [range.lazy.split.inner] | `split_view<V, P>::inner-iterator<true>::operator++(int)` should depend on `Base` | Yes |  |
3591(i) | C++23 | 25.7.16.5 [range.lazy.split.inner] | `lazy_split_view<input_view>::inner-iterator::base() &&` invalidates outer iterators | Yes |  |
3478(i) | Resolved | 25.7.17 [range.split] | `views::split` drops trailing empty range | Yes | 2 |
3590(i) | C++23 | 25.7.17.2 [range.split.view] | `split_view::base() const &` is overconstrained | Yes |  |
4017(i) | New | 25.7.17.3 [range.split.iterator] | Behavior of `std::views::split` on an empty range | Yes | 3 |
4082(i) | WP | 25.7.18.1 [range.concat.overview] | `views::concat(r)` is well-formed when `r` is an `output_range` | Yes |  |
4166(i) | Tentatively Ready | 25.7.18.2 [range.concat.view] | `concat_view::end()` should be more constrained in order to support noncopyable iterators | Yes |  |
4073(i) | New | 25.7.18.2 [range.concat.view] | `concat_view::size` may overflow | No | 4 |
4091(i) | New | 25.7.18.2 [range.concat.view] | `concat_view` rejects non-movable references | Yes | 4 |
4081(i) | New | 25.7.18.3 [range.concat.iterator] | `concat_view::iterator::operator-` is overconstrained | Yes | 3 |
4089(i) | New | 25.7.18.3 [range.concat.iterator] | `concat_view::iterator`'s `iter_swap` is overconstrained | Yes | 3 |
4079(i) | WP | 25.7.18.3 [range.concat.iterator] | Missing Preconditions in `concat_view::iterator`'s conversion constructor | Yes |  |
4012(i) | WP | 25.7.20.2 [range.common.view] | `common_view::begin/end` are missing the `simple-view` check | Yes |  |
3405(i) | C++23 | 25.7.20.2 [range.common.view] | `common_view`'s converting constructor is bad, too | Yes | 0 |
3717(i) | C++23 | 25.7.20.2 [range.common.view] | `common_view::end` should improve `random_access_range` case | Yes | 3 |
4019(i) | SG9 | 25.7.21 [range.reverse] | Reversing an infinite range leads to an infinite loop | No | 3 |
3494(i) | C++23 | 25.7.21 [range.reverse] | Allow ranges to be conditionally borrowed | Yes |  |
4097(i) | LEWG | 25.7.21.1 [range.reverse.overview] | `views::reverse` should be specialized for some view types | Yes | 3 |
3830(i) | New | 25.7.21.2 [range.reverse.view] | `reverse_view` should not cache when `ranges::next` has constant time complexity | Yes | 3 |
3387(i) | C++20 | 25.7.21.2 [range.reverse.view] | §[range.reverse.view] `reverse_view<V>` unintentionally requires `range<const V>` | Yes | 0 |
3811(i) | C++23 | 25.7.22.1 [range.as.const.overview] | `views::as_const` on `ref_view<T>` should return `ref_view<const T>` | Yes |  |
3850(i) | C++23 | 25.7.22.1 [range.as.const.overview] | `views::as_const` on `empty_view<T>` should return `empty_view<const T>` | Yes |  |
3386(i) | C++20 | 25.7.23 [range.elements] | `elements_view` needs its own `sentinel` type | Yes | 1 |
3563(i) | C++23 | 25.7.23.1 [range.elements.overview] | `keys_view` example is broken | Yes | 3 |
3797(i) | New | 25.7.23.2 [range.elements.view] | `elements_view` insufficiently constrained | Yes | 2 |
3406(i) | C++23 | 25.7.23.2 [range.elements.view] | `elements_view::begin()` and `elements_view::end()` have incompatible constraints | Yes | 1 |
3323(i) | C++20 | 25.7.23.2 [range.elements.view] | `has-tuple-element` helper concept needs `convertible_to` | Yes | 0 |
4114(i) | New | 25.7.23.3 [range.elements.iterator] | `elements_view::iterator::operator*` missing conditional `noexcept` specification | Yes | 3 |
3832(i) | New | 25.7.23.3 [range.elements.iterator] | Missing change for `element_view::iterator` in LWG 3798 | Yes | 3 |
3492(i) | C++23 | 25.7.23.3 [range.elements.iterator] | Minimal improvements to `elements_view::iterator` | Yes | 0 |
3502(i) | C++23 | 25.7.23.3 [range.elements.iterator] | `elements_view` should not be allowed to return dangling references | Yes | 2 |
3377(i) | C++20 | 25.7.23.3 [range.elements.iterator] | `elements_view::iterator` befriends a specialization of itself | Yes | 0 |
3558(i) | NAD Editorial | 25.7.23.4 [range.elements.sentinel] | `elements_view::sentinel`'s first `operator-` has wrong return type | Yes |  |
3919(i) | WP | 25.7.24 [range.enumerate] | `enumerate_view` may invoke UB for sized common non-forward underlying ranges | Yes | 3 |
3908(i) | Tentatively NAD | 25.7.24.3 [range.enumerate.iterator] | `enumerate_view::iterator` constructor is explicit | Yes |  |
4116(i) | New | 25.7.24.3 [range.enumerate.iterator] | `enumerate_view::iterator` and `cartesian_product_view::iterator` should not always provide `iterator_category` | Yes | 3 |
3912(i) | WP | 25.7.24.3 [range.enumerate.iterator] | `enumerate_view::iterator::operator-` should be `noexcept` | Yes |  |
3864(i) | New | 25.7.25 [range.zip] | `zip` over range of reference to an abstract type | No | 4 |
3731(i) | New | 25.7.25.2 [range.zip.view] | `zip_view` and `adjacent_view` are underconstrained | Yes | 3 |
3755(i) | C++23 | 25.7.25.2 [range.zip.view] | `tuple-for-each` can call user-defined `operator,` | Yes |  |
3692(i) | C++23 | 25.7.25.3 [range.zip.iterator] | `zip_view::iterator`'s `operator<=>` is overconstrained | Yes |  |
3773(i) | C++23 | 25.7.26.1 [range.zip.transform.overview] | `views::zip_transform` still requires `F` to be `copy_constructible` when empty pack | Yes |  |
3714(i) | NAD | 25.7.26.2 [range.zip.transform.view] | Non-single-argument constructors for range adaptors should not be `explicit` | Yes | 4 |
3702(i) | C++23 | 25.7.26.3 [range.zip.transform.iterator] | Should `zip_transform_view::iterator` remove `operator<`? | Yes |  |
4098(i) | WP | 25.7.27.1 [range.adjacent.overview] | `views::adjacent<0>` should reject non-forward ranges | Yes |  |
3735(i) | NAD | 25.7.27.1 [range.adjacent.overview] | `views::adjacent<0>` should be prohibited | Yes |  |
3848(i) | C++23 | 25.7.27.2 [range.adjacent.view] | `adjacent_view`, `adjacent_transform_view` and `slide_view` missing `base` accessor | Yes |  |
3947(i) | WP | 25.7.28.2 [range.adjacent.transform.view] | Unexpected constraints on `adjacent_transform_view::base()` | Yes |  |
3710(i) | C++23 | 25.7.29.2 [range.chunk.view.input] | The `end` of `chunk_view` for input ranges can be `const` | Yes |  |
3712(i) | C++23 | 25.7.29.2 [range.chunk.view.input] | `chunk_view` and `slide_view` should not be `default_initializable` | Yes |  |
3739(i) | NAD | 25.7.29.2 [range.chunk.view.input] | `chunk_view::size` should preserve the signedness of the size of the underlying range | Yes |  |
4006(i) | Tentatively NAD | 25.7.29.4 [range.chunk.outer.value] | `chunk_view::outer-iterator::value_type` should provide `empty` | Yes |  |
4236(i) | WP | 25.7.29.4 [range.chunk.outer.value] | `chunk_view::outer-iterator::value_type` should provide `reserve_hint` | Yes |  |
3707(i) | C++23 | 25.7.29.4 [range.chunk.outer.value] | `chunk_view::outer-iterator::value_type::size` should return unsigned type | Yes |  |
3851(i) | C++23 | 25.7.29.5 [range.chunk.inner.iter] | `chunk_view::inner-iterator` missing custom `iter_move` and `iter_swap` | Yes |  |
3880(i) | C++23 | 25.7.29.7 [range.chunk.fwd.iter] | Clarify `operator+=` complexity for `{chunk,stride}_view::iterator` | Yes |  |
3711(i) | C++23 | 25.7.30.2 [range.slide.view] | Missing preconditions for `slide_view` constructor | Yes |  |
3740(i) | NAD | 25.7.30.2 [range.slide.view] | `slide_view::size` should preserve the signedness of underlying range's size | Yes |  |
4254(i) | New | 25.7.32.3 [range.stride.iterator] | `stride_view::iterator` should provide `operator->` | Yes | 3 |
3760(i) | C++23 | 25.7.33 [range.cartesian] | `cartesian_product_view::iterator`'s `parent_` is never valid | Yes |  |
3777(i) | Open | 25.7.33.2 [range.cartesian.view] | Common `cartesian_product_view` produces an invalid range if the first range is input and one of the ranges is empty | Yes | 2 |
3761(i) | C++23 | 25.7.33.3 [range.cartesian.iterator] | `cartesian_product_view::iterator::operator-` should pass by reference | Yes |  |
3801(i) | C++23 | 25.7.33.3 [range.cartesian.iterator] | `cartesian_product_view::iterator::distance-from` ignores the size of last underlying range | Yes |  |
3820(i) | C++23 | 25.7.33.3 [range.cartesian.iterator] | `cartesian_product_view::iterator::prev` is not quite right | Yes |  |
3849(i) | C++23 | 25.7.33.3 [range.cartesian.iterator] | `cartesian_product_view::iterator`'s default constructor is overconstrained | Yes |  |
4235(i) | WP | 25.7.34.2 [range.cache.latest.view] | `cache_latest_view` and `to_input_view` miss `reserve_hint` | Yes | 2 |
4210(i) | New | 25.7.34.3 [range.cache.latest.iterator] | Issue with `cache_latest_view::iterator`'s reference type | No | 3 |
4226(i) | New | 25.7.35 [range.to.input] | `to_input_view::iterator` cannot be compared to its `const` sentinel | Yes | 2 |
4418(i) | New | 25.8.5 [coro.generator.promise] | `co_yield elements_of(vector<int>())` does not compile | Yes | 2 |
3899(i) | WP | 25.8.5 [coro.generator.promise] | `co_yield`ing elements of an lvalue `generator` is unnecessarily inefficient | Yes | 3 |
3900(i) | WP | 25.8.5 [coro.generator.promise] | The `allocator_arg_t` overloads of `generator::promise_type::operator new` should not be constrained | Yes | 3 |
4119(i) | WP | 25.8.5 [coro.generator.promise] | `generator::promise_type::yield_value(ranges::elements_of<R, Alloc>)`'s nested `generator` may be ill-formed | Yes |  |
3894(i) | WP | 25.8.5 [coro.generator.promise] | `generator::promise_type::yield_value(ranges::elements_of<Rng, Alloc>)` should not be `noexcept` | Yes |  |
3826(i) | C++23 | 25.8.5 [coro.generator.promise] | Redundant specification [for overload of `yield_value`] | Yes |  |
4057(i) | New | 25.8.6 [coro.generator.iterator] | `generator::iterator`'s `operator*` is not `noexcept` when it can be | Yes | 3 |
4117(i) | New | 25.8.6 [coro.generator.iterator] | `generator::iterator` should provide `iterator_concept` | Yes | 4 |
3762(i) | C++23 | 25.8.6 [coro.generator.iterator] | `generator::iterator::operator==` should pass by reference | Yes |  |

## Section 26 (203 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2963(i) | New | 26 [algorithms] | Algorithms with underspecified iterator requirements | No | 3 |
1238(i) | Open | 26 [algorithms] | Defining algorithms taking iterator for range | No | 3 |
2173(i) | Open | 26 [algorithms] | The meaning of `operator +` in the description of the algorithms | Yes | 4 |
1205(i) | C++11 | 26 [algorithms] | Some algorithms could more clearly document their handling of empty ranges | Yes |  |
92(i) | CD1 | 26 [algorithms] | Incomplete Algorithm Requirements | Yes |  |
210(i) | TC1 | 26 [algorithms] | distance first and last confused | Yes |  |
2917(i) | Resolved | 26 [algorithms] | Parallel algorithms cannot easily work with `InputIterator`s | Yes |  |
1282(i) | NAD | 26 [algorithms] | A proposal to add `std::split` algorithm | Yes |  |
1053(i) | NAD | 26 [algorithms] | Unify algorithms with operator and function object variants | Yes |  |
631(i) | NAD | 26 [algorithms] | conflicting requirements for `BinaryPredicate` | Yes |  |
2082(i) | NAD | 26 [algorithms] | Misleading complexity requirements in `<algorithm>` | Yes |  |
2727(i) | C++17 | 26.1 [algorithms.general] | Parallel algorithms with `constexpr` specifier | Yes | 0 |
4277(i) | New | 26.2 [algorithms.requirements] | §[algorithms.requirements] It is unclear what an algorithm is | Yes | 4 |
3049(i) | Open | 26.2 [algorithms.requirements] | Missing wording allowing algorithms to use copies of function objects as substitutes for their parameters | Yes | 3 |
3419(i) | C++23 | 26.2 [algorithms.requirements] | §[algorithms.requirements]/15 doesn't reserve as many rights as it intends to | Yes | 0 |
2932(i) | C++20 | 26.3.3 [algorithms.parallel.exec] | Constraints on parallel algorithm implementations are underspecified | Yes |  |
2718(i) | C++17 | 26.3.3 [algorithms.parallel.exec] | Parallelism bug in [algorithms.parallel.exec] p2 | Yes |  |
2880(i) | Resolved | 26.3.3 [algorithms.parallel.exec] | Relax complexity specifications for non-sequenced policies | Yes |  |
3062(i) | C++20 | 26.3.5 [algorithms.parallel.overloads] | Unnecessary `decay_t` in `is_execution_policy_v` should be `remove_cvref_t` | Yes | 0 |
4273(i) | New | 26.3.6 [execpol] | Standard execution policy types should be conventional tag class types | Yes | 3 |
2909(i) | NAD | 26.3.6.2 [execpol.type] | User specializations of `is_execution_policy` should be ill-formed | Yes |  |
4297(i) | Tentatively Ready | 26.4 [algorithm.syn] | Missing `permutable` constraint for iterator overloads in Parallel Range Algorithms | Yes |  |
4095(i) | Tentatively NAD | 26.4 [algorithm.syn] | `ranges::fold_meow` should explicitly spell out the return type | Yes |  |
3180(i) | C++20 | 26.4 [algorithm.syn] | Inconsistently named return type for `ranges::minmax_element` | Yes | 0 |
483(i) | Dup | 26.6 [alg.nonmodifying] | Heterogeneous equality and EqualityComparable | Yes |  | 283
3793(i) | New | 26.6.5 [alg.foreach] | Requirements for some algorithms' `Size` template parameters are unclear | No | 3 |
4241(i) | LEWG | 26.6.5 [alg.foreach] | `ranges::for_each(_n)` should be less constrained | Yes | 3 |
2747(i) | C++17 | 26.6.5 [alg.foreach] | Possibly redundant `std::move` in [alg.foreach] | Yes | 0 |
1110(i) | C++11 | 26.6.5 [alg.foreach] | Is `for_each` overconstrained? | Yes |  |
475(i) | CD1 | 26.6.5 [alg.foreach] | May the function object passed to for_each modify the elements of the iterated sequence? | Yes |  |
3213(i) | Resolved | 26.6.5 [alg.foreach] | `for_each_n` and `copy_n` missing requirements for `Size` | Yes | 3 |
969(i) | NAD Editorial | 26.6.5 [alg.foreach] | What happened to Library Issue 475? | Yes |  |
290(i) | NAD | 26.6.5 [alg.foreach] | Requirements to for_each and its function object | Yes |  |
219(i) | NAD | 26.6.6 [alg.find] | `find` algorithm missing version that takes a binary predicate argument | Yes |  |
244(i) | NAD | 26.6.6 [alg.find] | Must `find`'s third argument be CopyConstructible? | Yes |  |
2150(i) | C++14 | 26.6.8 [alg.find.end] | Unclear specification of `find_end` | Yes |  |
576(i) | CD1 | 26.6.9 [alg.find.first.of] | find_first_of is overconstrained | Yes |  |
150(i) | TC1 | 26.6.9 [alg.find.first.of] | Find_first_of says integer instead of iterator | Yes |  |
240(i) | CD1 | 26.6.10 [alg.adjacent.find] | Complexity of adjacent_find() is meaningless | Yes |  |
1000(i) | NAD Concepts | 26.6.10 [alg.adjacent.find] | adjacent_find is over-constrained | Yes |  |
3560(i) | C++23 | 26.6.13 [alg.equal] | `ranges::equal` and `ranges::is_permutation` should short-circuit for `sized_ranges` | Yes |  |
2967(i) | NAD | 26.6.13 [alg.equal] | `std::equal` on empty ranges | Yes |  |
1431(i) | C++11 | 26.6.14 [alg.is.permutation] | `is_permutation` must be more restrictive | Yes |  |
4179(i) | WP | 26.6.15 [alg.search] | Wrong range in [alg.search] | Yes |  |
1338(i) | C++11 | 26.6.15 [alg.search] | LWG 1205 incorrectly applied | Yes |  |
426(i) | CD1 | 26.6.15 [alg.search] | search_n(), fill_n(), and generate_n() with negative n | Yes |  |
714(i) | CD1 | 26.6.15 [alg.search] | `search_n` complexity is too lax | Yes |  |
3596(i) | NAD | 26.6.16 [alg.starts.with] | `ranges::starts_with` and `ranges::ends_with` are underspecified | Yes |  |
4105(i) | WP | 26.6.17 [alg.ends.with] | `ranges::ends_with`'s Returns misses difference casting | Yes |  |
4093(i) | New | 26.6.18 [alg.fold] | `ranges::fold_left_first_with_iter` incorrectly constructs `optional<U>` | Yes | 3 |
4094(i) | New | 26.6.18 [alg.fold] | `ranges::fold_meow` is overconstrained | Yes | 3 |
3969(i) | New | 26.6.18 [alg.fold] | `std::ranges::fold_left_first_with_iter` should be more ADL-proof | Yes | 3 |
3779(i) | NAD | 26.6.18 [alg.fold] | `ranges::fold_*` can unintentionally `const_cast` and `reinterpret_cast` | Yes |  |
4262(i) | New | 26.7.1 [alg.copy] | `copy_if`, `remove_copy`, `remove_copy_if`, `unique_copy` have too strong preconditions | Yes | 3 |
3089(i) | New | 26.7.1 [alg.copy] | `copy_n` should require non-overlapping ranges | Yes | 3 |
2471(i) | Open | 26.7.1 [alg.copy] | `copy_n`'s number of `InputIterator` increments unspecified | No | 3 |
2689(i) | C++17 | 26.7.1 [alg.copy] | Parallel versions of `std::copy` and `std::move` shouldn't be in order | Yes | 0 |
2039(i) | C++14 | 26.7.1 [alg.copy] | Issues with `std::reverse` and `std::copy_if` | Yes |  |
2242(i) | NAD | 26.7.1 [alg.copy] | `[uninitialized_]copy_n()` defect | Yes | 2 |
1206(i) | C++11 | 26.7.2 [alg.move] | Incorrect requires for `move_backward` and `copy_backward` | Yes |  |
187(i) | CD1 | 26.7.3 [alg.swap] | iter_swap underspecified | Yes |  |
809(i) | CD1 | 26.7.3 [alg.swap] | `std::swap` should be overloaded for array types | Yes |  |
227(i) | TC1 | 26.7.3 [alg.swap] | std::swap() should require CopyConstructible or DefaultConstructible arguments | Yes |  |
912(i) | NAD Concepts | 26.7.3 [alg.swap] | Array swap needs to be conceptualized | Yes |  |
242(i) | CD1 | 26.7.4 [alg.transform] | Side effects of function objects | Yes |  |
293(i) | NAD | 26.7.4 [alg.transform] | Order of execution in transform algorithm | Yes |  |
3868(i) | LEWG | 26.7.5 [alg.replace] | Constrained algorithms should not require `output_iterator` | Yes | 4 |
283(i) | CD1 | 26.7.5 [alg.replace] | std::replace() requirement incorrect/insufficient | Yes |  | 483
337(i) | CD1 | 26.7.5 [alg.replace] | replace_copy_if's template parameter should be InputIterator | Yes |  |
913(i) | NAD Concepts | 26.7.5 [alg.replace] | Superfluous requirements for replace algorithms | Yes |  |
1087(i) | NAD Concepts | 26.7.5 [alg.replace] | Incorrect `OutputIterator` concept requirements for `replace` algorithms | Yes |  |
865(i) | C++11 | 26.7.6 [alg.fill] | More algorithms that throw away information | Yes |  |
3186(i) | C++20 | 26.7.8 [alg.remove] | `ranges` removal, partition, and `partial_sort_copy` algorithms discard useful information | Yes | 1 |
2110(i) | C++14 | 26.7.8 [alg.remove] | `remove` can't swap but note says it might | Yes |  |
779(i) | CD1 | 26.7.8 [alg.remove] | Resolution of #283 incomplete | Yes |  |
367(i) | NAD | 26.7.8 [alg.remove] | remove_copy/remove_copy_if and Input Iterators | Yes |  |
489(i) | NAD | 26.7.8 [alg.remove] | std::remove / std::remove_if wrongly specified | Yes |  |
4269(i) | Tentatively Ready | 26.7.9 [alg.unique] | `unique_copy` passes arguments to its predicate backwards | Yes |  |
4103(i) | New | 26.7.9 [alg.unique] | `ranges::unique_copy`'s constraints for the case where `result` is an `input_iterator` are not quite right | Yes | 3 |
2439(i) | C++17 | 26.7.9 [alg.unique] | `unique_copy()` sometimes can't fall back to reading its output | Yes | 3 |
1241(i) | C++11 | 26.7.9 [alg.unique] | `unique_copy` needs to require `EquivalenceRelation` | Yes |  |
202(i) | CD1 | 26.7.9 [alg.unique] | unique() effects unclear when predicate not an equivalence relation | Yes |  |
239(i) | CD1 | 26.7.9 [alg.unique] | Complexity of unique() and/or unique_copy incorrect | Yes |  |
241(i) | CD1 | 26.7.9 [alg.unique] | Does unique_copy() require CopyConstructible and Assignable? | Yes |  |
538(i) | CD1 | 26.7.9 [alg.unique] | 241 again: Does unique_copy() require CopyConstructible and Assignable? | Yes |  |
1101(i) | NAD Editorial | 26.7.9 [alg.unique] | `unique` requirements | Yes |  |
481(i) | NAD | 26.7.9 [alg.unique] | unique's effects on the range [result, last) | Yes |  |
490(i) | NAD | 26.7.9 [alg.unique] | std::unique wrongly specified | Yes |  |
914(i) | NAD Concepts | 26.7.9 [alg.unique] | Superfluous requirement for unique | Yes |  |
2074(i) | C++14 | 26.7.10 [alg.reverse] | Off by one error in `std::reverse_copy` | Yes |  |
223(i) | TC1 | 26.7.10 [alg.reverse] | reverse algorithm should use iter_swap rather than swap | Yes |  |
2985(i) | Resolved | 26.7.10 [alg.reverse] | `std::reverse` should be permitted to be vectorized | Yes |  |
3759(i) | C++23 | 26.7.11 [alg.rotate] | `ranges::rotate_copy` should use `std::move` | Yes |  |
488(i) | CD1 | 26.7.11 [alg.rotate] | rotate throws away useful information | Yes |  |
2405(i) | NAD | 26.7.11 [alg.rotate] | `rotate()`'s return value is incorrect when `middle == first` | Yes |  |
2716(i) | C++17 | 26.7.12 [alg.random.sample] | Specification of `shuffle` and `sample` disallows lvalue `URNG`s | Yes | 0 |
3191(i) | C++20 | 26.7.13 [alg.random.shuffle] | `std::ranges::shuffle` synopsis does not match algorithm definition | Yes | 1 |
1432(i) | C++11 | 26.7.13 [alg.random.shuffle] | `random_shuffle` signatures are inconsistent | Yes |  | 1433
552(i) | CD1 | 26.7.13 [alg.random.shuffle] | random_shuffle and its generator | Yes |  |
1093(i) | Resolved | 26.7.13 [alg.random.shuffle] | Multiple definitions for `random_shuffle` algorithm | Yes |  |
1433(i) | Dup | 26.7.13 [alg.random.shuffle] | `random_shuffle` and `shuffle` should have consistent signatures | Yes |  | 1432
3031(i) | C++20 | 26.8 [alg.sorting] | Algorithms and predicates with non-const reference arguments | Yes | 2 |
2492(i) | C++17 | 26.8 [alg.sorting] | Clarify requirements for `comp` | Yes | 0 |
556(i) | C++11 | 26.8 [alg.sorting] | Is `Compare` a `BinaryPredicate`? | Yes |  |
218(i) | NAD | 26.8 [alg.sorting] | Algorithms do not use binary predicate objects for default comparisons | Yes |  |
3713(i) | C++23 | 26.8.1 [alg.sorting.general] | Sorted with respect to comparator (only) | Yes |  |
812(i) | NAD Editorial | 26.8.2 [alg.sort] | unsolicited multithreading considered harmful? | Yes |  |
713(i) | CD1 | 26.8.2.1 [sort] | `sort()` complexity is too lax | Yes |  |
499(i) | NAD Editorial | 26.8.2.2 [stable.sort] | Std. doesn't seem to require stable_sort() to be stable! | Yes |  |
2267(i) | New | 26.8.2.4 [partial.sort.copy] | `partial_sort_copy` underspecified for ranges of two different types | No | 3 |
4162(i) | New | 26.8.3 [alg.nth.element] | Worst time complexity of non-parallel versions of `nth_element` is underspecified | Yes | 3 |
2339(i) | C++14 | 26.8.3 [alg.nth.element] | Wording issue in `nth_element` | Yes | 0 |
2163(i) | C++14 | 26.8.3 [alg.nth.element] | `nth_element` requires inconsistent post-conditions | Yes |  |
4111(i) | New | 26.8.4 [alg.binary.search] | LWG 270 and ranges version of binary search algorithms | No | 3 |
270(i) | CD1 | 26.8.4 [alg.binary.search] | Binary search requirements overly strict | Yes |  | 472
191(i) | NAD | 26.8.4 [alg.binary.search] | Unclear complexity for algorithms such as binary search | Yes |  |
577(i) | CD1 | 26.8.4.3 [upper.bound] | upper_bound(first, last, ...) cannot return last | Yes |  |
384(i) | CD1 | 26.8.4.4 [equal.range] | equal_range has unimplementable runtime complexity | Yes |  |
472(i) | Dup | 26.8.4.4 [equal.range] | Missing "Returns" clause in std::equal_range | Yes |  | 270
787(i) | CD1 | 26.8.4.5 [binary.search] | complexity of `binary_search` | Yes |  |
2357(i) | C++14 | 26.8.5 [alg.partitions] | Remaining "`Assignable`" requirement | Yes | 0 |
498(i) | C++11 | 26.8.5 [alg.partitions] | Requirements for partition() and stable_partition() too strong | Yes |  |
2741(i) | Resolved | 26.8.5 [alg.partitions] | `is_partitioned` requirements need updating | Yes | 3 |
2973(i) | LEWG | 26.8.6 [alg.merge] | `inplace_merge` exact comparison count complexity prohibits useful real-world optimizations | Yes | 4 |
4196(i) | WP | 26.8.6 [alg.merge] | Complexity of `inplace_merge()` is incorrect | Yes | 4 |
780(i) | C++11 | 26.8.6 [alg.merge] | `std::merge()` specification incorrect/insufficient | Yes |  |
291(i) | CD1 | 26.8.7 [alg.set.operations] | Underspecification of set algorithms | Yes |  |
411(i) | CD1 | 26.8.7 [alg.set.operations] | Wrong names of set member functions | Yes |  |
3115(i) | Resolved | 26.8.7.2 [includes] | Unclear description for algorithm `includes` | Yes | 3 |
862(i) | NAD Editorial | 26.8.7.2 [includes] | Impossible complexity for 'includes' | Yes |  |
1109(i) | NAD Concepts | 26.8.7.2 [includes] | `std::includes` should require `CopyConstructible` predicate | Yes |  |
3534(i) | LEWG | 26.8.7.4 [set.intersection] | `ranges::set_intersection` and `ranges::set_difference` algorithm requirements are too strict | Yes | 3 |
3032(i) | C++23 | 26.8.8 [alg.heap.operations] | `ValueSwappable` requirement missing for `push_heap` and `make_heap` | Yes | 3 |
2166(i) | C++17 | 26.8.8 [alg.heap.operations] | Heap property underspecified? | Yes | 3 |
193(i) | TC1 | 26.8.8 [alg.heap.operations] | Heap operations description incorrect | Yes |  | 216
3029(i) | Open | 26.8.8.3 [pop.heap] | `pop_heap` over-constrains input | Yes | 3 |
2444(i) | C++20 | 26.8.8.5 [sort.heap] | Inconsistent complexity for `std::sort_heap` | Yes | 3 |
4167(i) | New | 26.8.9 [alg.min.max] | Use of "smaller" and "larger" in `min`, `max`, and `minmax` is unclear | Yes | 3 |
4034(i) | New | 26.8.9 [alg.min.max] | Clarify specification of `std::min` and `std::max` | Yes | 4 |
2239(i) | C++17 | 26.8.9 [alg.min.max] | `min/max/minmax` requirements | Yes | 3 |
2325(i) | C++17 | 26.8.9 [alg.min.max] | `minmax_element()`'s behavior differing from `max_element()`'s should be noted | Yes | 3 |
2369(i) | C++17 | 26.8.9 [alg.min.max] | `constexpr max(initializer_list)` vs `max_element` | Yes | 3 |
2350(i) | C++14 | 26.8.9 [alg.min.max] | `min`, `max`, and `minmax` should be `constexpr` | Yes | 1 |
281(i) | CD1 | 26.8.9 [alg.min.max] | std::min() and max() requirements overly restrictive | Yes |  | 486
715(i) | CD1 | 26.8.9 [alg.min.max] | `minmax_element` complexity is too lax | Yes |  |
212(i) | TC1 | 26.8.9 [alg.min.max] | Empty range behavior unclear for several algorithms | Yes |  |
915(i) | NAD Editorial | 26.8.9 [alg.min.max] | `minmax` with `initializer_list` should return `pair` of `T`, not `pair` of `const T&` | Yes |  |
1013(i) | NAD Editorial | 26.8.9 [alg.min.max] | Remove `IsSameType` hold-over constraints | Yes |  |
1434(i) | NAD Editorial | 26.8.9 [alg.min.max] | For `min/max` functions replace variadic arguments by `initializer_list` argument | Yes |  |
1308(i) | NAD | 26.8.9 [alg.min.max] | Concerns about `initializer_list` overloads of `min`, `max`, and `minmax` | Yes |  |
190(i) | NAD | 26.8.9 [alg.min.max] | min() and max() functions should be std::binary_functions | Yes |  |
486(i) | Dup | 26.8.9 [alg.min.max] | min/max CopyConstructible requirement is too strict | Yes |  | 281
2688(i) | C++17 | 26.8.10 [alg.clamp] | `clamp` misses preconditions and has extraneous condition on result | Yes | 0 |
142(i) | TC1 | 26.8.11 [alg.lex.comparison] | lexicographical_compare complexity wrong | Yes |  |
3410(i) | C++23 | 26.8.12 [alg.three.way] | `lexicographical_compare_three_way` is overspecified | Yes | 3 |
3350(i) | C++20 | 26.8.12 [alg.three.way] | Simplify return type of `lexicographical_compare_three_way` | Yes | 0 |
3061(i) | Resolved | 26.8.12 [alg.three.way] | What is the return type of `compare_3way`? | Yes | 2 |
3169(i) | C++20 | 26.8.13 [alg.permutation.generators] | `ranges` permutation generators discard useful information | Yes | 0 |
3487(i) | New | 26.10 [numeric.ops] | Missing precondition on input and output aliasing of [numeric.ops] | No | 3 |
2055(i) | Resolved | 26.10 [numeric.ops] | `std::move` in `std::accumulate` and other algorithms | Yes | 3 |
2924(i) | Resolved | 26.10 [numeric.ops] | An `ExecutionPolicy` overload for `inner_product()` seems impractical | Yes |  |
1067(i) | NAD Concepts | 26.10 [numeric.ops] | simplified wording for inner_product | Yes |  |
2918(i) | Resolved | 26.10.5 [inner.product] | Possible need for extra storage in `inner_product` | Yes |  |
3048(i) | C++20 | 26.10.6 [transform.reduce] | `transform_reduce(exec, first1, last1, first2, init)` discards execution policy | Yes | 0 |
539(i) | C++11 | 26.10.7 [partial.sum] | `partial_sum` and `adjacent_difference` should mention requirements | Yes |  |
3060(i) | New | 26.10.8 [exclusive.scan] | `XXX_scan` algorithms are specified to work with move-only `T`, but are specified to make `N` copies of `T` into the destination range | No | 2 |
2687(i) | C++17 | 26.10.8 [exclusive.scan] | `{inclusive,exclusive}_scan` misspecified | Yes | 1 |
3222(i) | C++20 | 26.10.9 [inclusive.scan] | P0574R1 introduced preconditions on non-existent parameters | Yes | 0 |
3463(i) | New | 26.10.11 [transform.inclusive.scan] | Incorrect requirements for `transform_inclusive_scan` without initial value | Yes | 3 |
3058(i) | C++20 | 26.10.12 [adjacent.difference] | Parallel `adjacent_difference` shouldn't require creating temporaries | Yes | 3 |
2919(i) | Resolved | 26.10.12 [adjacent.difference] | The specification for `adjacent_difference` has baked-in sequential semantics | Yes |  |
871(i) | C++11 | 26.10.13 [numeric.iota] | Iota's requirements on `T` are too strong | Yes |  |
2837(i) | C++17 | 26.10.14 [numeric.ops.gcd] | `gcd` and `lcm` should support a wider range of input values | Yes | 0 |
2759(i) | C++17 | 26.10.14 [numeric.ops.gcd] | `gcd` / `lcm` and `bool` for the WP | Yes |  |
4265(i) | Tentatively Ready | 26.10.16 [numeric.ops.midpoint] | `std::midpoint` should not accept `const bool` | Yes |  |
3200(i) | C++20 | 26.10.16 [numeric.ops.midpoint] | `midpoint` should not constrain `T` is complete | Yes | 2 |
4030(i) | WP | 26.10.17.1 [numeric.sat.func] | Clarify whether arithmetic expressions in [numeric.sat.func] are mathematical or C++ | Yes |  |
3628(i) | New | 26.11 [specialized.algorithms] | "Effects: Equivalent to:" and uninitialized memory algorithms | No | 3 |
3063(i) | New | 26.11 [specialized.algorithms] | Parallel algorithms in `<memory>` are underspecified | No | 3 |
2433(i) | C++17 | 26.11 [specialized.algorithms] | `uninitialized_copy()`/etc. should tolerate overloaded `operator&` | Yes | 0 |
866(i) | C++11 | 26.11 [specialized.algorithms] | Qualification of placement new-expressions | Yes |  |
999(i) | C++11 | 26.11 [specialized.algorithms] | Taking the address of a function | Yes |  |
3064(i) | Resolved | 26.11 [specialized.algorithms] | How do uninitialized memory algorithms obtain pointer without undefined behavior? | Yes | 3 |
3156(i) | Resolved | 26.11 [specialized.algorithms] | `ForwardIterator` should only mean forward iterator | Yes | 3 |
1029(i) | NAD Concepts | 26.11 [specialized.algorithms] | Specialized algorithms for memory management need to be concept-constrained templates | Yes |  |
3870(i) | C++23 | 26.11.1 [specialized.algorithms.general] | Remove `voidify` | Yes |  |
3647(i) | New | 26.11.2 [special.mem.concepts] | `nothrow-input-iterator` constraints should not mention copying | Yes | 3 |
3747(i) | C++23 | 26.11.5 [uninitialized.copy] | `ranges::uninitialized_copy_n`, `ranges::uninitialized_move_n`, and `ranges::destroy_n` should use `std::move` | Yes |  |
3054(i) | C++20 | 26.11.5 [uninitialized.copy] | `uninitialized_copy` appears to not be able to meet its exception-safety guarantee | Yes | 2 |
3355(i) | C++20 | 26.11.5 [uninitialized.copy] | The memory algorithms should support move-only input iterators introduced by P1207 | Yes | 2 |
754(i) | NAD Editorial | 26.11.5 [uninitialized.copy] | Ambiguous return clause for `std::uninitialized_copy` | Yes |  |
582(i) | NAD | 26.11.5 [uninitialized.copy] | specialized algorithms and volatile storage | Yes |  |
3918(i) | WP | 26.11.6 [uninitialized.move] | `std::uninitialized_move/_n` and guaranteed copy elision | Yes | 3 |
1339(i) | C++11 | 26.11.7 [uninitialized.fill] | `uninitialized_fill_n` should return the end of its range | Yes |  |
3888(i) | New | 26.11.8 [specialized.construct] | Most ranges uninitialized memory algorithms are underconstrained | Yes | 3 |
3436(i) | WP | 26.11.8 [specialized.construct] | `std::construct_at` should support arrays | Yes | 2 |
3889(i) | New | 26.11.9 [specialized.destroy] | `std::(ranges::)destroy_at` should destroy array elements in the decreasing index order | Yes | 3 |
4077(i) | New | 26.12.2 [alg.rand.generate] | Unclear preconditions of `std::ranges::generate_random` | No | 2 |
4085(i) | WP | 26.12.2 [alg.rand.generate] | `ranges::generate_random`'s helper lambda should specify the return type | Yes | 2 |
4086(i) | NAD | 26.12.2 [alg.rand.generate] | `ranges::generate_random_n` is missing | Yes |  |
3521(i) | C++23 | 26.13 [alg.c.library] | Overly strict requirements on `qsort` and `bsearch` | Yes |  |
286(i) | CD1 | 26.13 [alg.c.library] | <cstdlib> requirements missing size_t typedef | Yes |  |
405(i) | CD1 | 26.13 [alg.c.library] | qsort and POD | Yes |  |

## Section 27 (154 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
7(i) | TC1 | 27 [strings] | String clause minor problems | Yes |  |
2841(i) | Resolved | 27 [strings] | Use of "Equivalent to" in [strings] | Yes | 3 |
85(i) | NAD | 27 [strings] | String char types | Yes |  |
1081(i) | NAD Concepts | 27 [strings] | `basic_string` needs to be a concept-constrained template | Yes |  |
2513(i) | New | 27.1 [strings.general] | Missing requirements for `basic_string::value_type` | No | 4 |
1170(i) | C++11 | 27.1 [strings.general] | String char-like types no longer PODs | Yes |  |
3695(i) | NAD | 27.1 [strings.general] | The standard-layout property of char-like types serves for nothing | Yes | 4 |
2994(i) | WP | 27.2 [char.traits] | Needless UB for `basic_string` and `basic_string_view` | Yes | 3 |
830(i) | NAD Editorial | 27.2 [char.traits] | Incomplete list of char_traits specializations | Yes |  |
570(i) | NAD | 27.2 [char.traits] | Request adding additional explicit specializations of `char_traits` | Yes |  |
4152(i) | New | 27.2.2 [char.traits.require] | The primary template of `std::char_traits` is totally underspecified | Yes | 4 |
3694(i) | New | 27.2.2 [char.traits.require] | Should `traits_type::length` be customizable? | No | 4 |
3085(i) | C++23 | 27.2.2 [char.traits.require] | `char_traits::copy` precondition too weak | Yes | 2 |
3518(i) | C++23 | 27.2.2 [char.traits.require] | Exception requirements on char trait operations unclear | Yes |  |
335(i) | CD1 | 27.2.2 [char.traits.require] | minor issue with char_traits, table 37 | Yes |  |
352(i) | CD1 | 27.2.3 [char.traits.typedefs] | missing fpos requirements | Yes |  |
1200(i) | NAD | 27.2.3 [char.traits.typedefs] | "surprising" `char_traits<T>::int_type` requirements | Yes |  |
3942(i) | New | 27.2.4 [char.traits.specializations] | Inconsistent use of `const char_type&` in standard specializations of `std::char_traits` | Yes | 3 |
709(i) | CD1 | 27.2.4 [char.traits.specializations] | `char_traits::not_eof` has wrong signature | Yes |  |
2232(i) | Resolved | 27.2.4 [char.traits.specializations] | [CD] The `char_traits` specializations should declare their `length()`, `compare()`, and `find()` members constexpr | Yes |  |
831(i) | NAD Editorial | 27.2.4 [char.traits.specializations] | wrong type for not_eof() | Yes |  |
4063(i) | New | 27.2.4.2 [char.traits.specializations.char] | Freestanding `std::char_traits<char>::eof` depends on non-freestanding `EOF` | No | 2 |
467(i) | CD1 | 27.2.4.2 [char.traits.specializations.char] | char_traits::lt(), compare(), and memcmp() | Yes |  |
2959(i) | New | 27.2.4.4 [char.traits.specializations.char16.t] | `char_traits<char16_t>::eof` is a valid UTF-16 code unit | No | 3 |
1414(i) | C++11 | 27.2.4.4 [char.traits.specializations.char16.t] | Fixing remaining dead links to `POS_T` and `OFF_T` | Yes |  | 1444
57(i) | TC1 | 27.2.4.6 [char.traits.specializations.wchar.t] | Mistake in char_traits | Yes |  |
3989(i) | New | 27.3 [string.view] | The whole range for an iterator obtained from a `std::span` or `std::basic_string_view` is not clear | No | 3 |
2883(i) | LEWG | 27.3 [string.view] | The standard library should provide `string_view` parameters instead or in addition for functions defined with `char const *` or `string const &` as parameter types. | No | 4 |
2778(i) | C++17 | 27.3 [string.view] | `basic_string_view` is missing `constexpr` | Yes | 0 |
2780(i) | Resolved | 27.3 [string.view] | `basic_string_view::copy` is missing `constexpr` | Yes | 2 |
3950(i) | WP | 27.3.2 [string.view.synop] | `std::basic_string_view` comparison operators are overspecified | Yes |  |
3457(i) | New | 27.3.3 [string.view.template] | `*this` is not invalidated | Yes | 3 |
2938(i) | Resolved | 27.3.3 [string.view.template] | `basic_string_view::const_iterator` should be literal types | Yes | 2 |
3068(i) | NAD | 27.3.3 [string.view.template] | Forbid assigning an rvalue `basic_string` to `basic_string_view` | Yes | 2 |
4410(i) | New | 27.3.3.2 [string.view.cons] | `basic_string_view(It begin, End end)` is underconstrained | Yes | 4 |
4102(i) | New | 27.3.3.2 [string.view.cons] | `string_view(Iter, Iter)` constructor breaks existing code | No | 2 |
3573(i) | C++23 | 27.3.3.2 [string.view.cons] | Missing Throws element for `basic_string_view(It begin, End end)` | Yes |  |
3581(i) | C++23 | 27.3.3.2 [string.view.cons] | The range constructor makes `basic_string_view` not trivially move constructible | Yes |  |
3857(i) | C++23 | 27.3.3.2 [string.view.cons] | `basic_string_view` should allow explicit conversion when only traits vary | Yes |  |
2826(i) | C++17 | 27.3.3.4 [string.view.iterators] | `string_view` iterators use old wording | Yes | 0 |
3040(i) | C++20 | 27.3.3.8 [string.view.ops] | `basic_string_view::starts_with` Effects are incorrect | Yes | 0 |
2777(i) | C++17 | 27.3.3.8 [string.view.ops] | `basic_string_view::copy` should use `char_traits::copy` | Yes | 0 |
3432(i) | C++23 | 27.3.4 [string.view.comparison] | Missing requirement for `comparison_category` | Yes | 0 |
2755(i) | C++17 | 27.3.5 [string.view.io] | §[string.view.io] uses non-existent `basic_string_view::to_string` function | Yes | 0 |
2791(i) | Resolved | 27.3.6 [string.view.hash] | `string_view` objects and strings should yield the same hash values | Yes |  |
3339(i) | New | 27.4.3 [basic.string] | Move-constructed empty-container capacity | No | 3 |
3451(i) | New | 27.4.3 [basic.string] | Inconsistently explicit deduction guides | Yes | 3 |
3075(i) | C++20 | 27.4.3 [basic.string] | `basic_string` needs deduction guides from `basic_string_view` | Yes |  |
2063(i) | C++17 | 27.4.3 [basic.string] | Contradictory requirements for string move assignment | Yes | 3 |
2064(i) | C++14 | 27.4.3 [basic.string] | More `noexcept` issues in `basic_string` | Yes |  |
2268(i) | C++14 | 27.4.3 [basic.string] | Setting a default argument in the declaration of a member function `assign` of `std::basic_string` | Yes |  |
876(i) | C++11 | 27.4.3 [basic.string] | `basic_string` access operations should give stronger guarantees | Yes |  |
180(i) | CD1 | 27.4.3 [basic.string] | Container member iterator arguments constness has unintended consequences | Yes |  |
263(i) | CD1 | 27.4.3 [basic.string] | Severe restriction on `basic_string` reference counting | Yes |  |
530(i) | CD1 | 27.4.3 [basic.string] | Must elements of a string be contiguous? | Yes |  |
534(i) | CD1 | 27.4.3 [basic.string] | Missing basic_string members | Yes |  |
42(i) | TC1 | 27.4.3 [basic.string] | String ctors specify wrong default allocator | Yes |  |
83(i) | TC1 | 27.4.3 [basic.string] | String::npos vs. string::max_size() | Yes |  | 89
209(i) | TC1 | 27.4.3 [basic.string] | basic_string declarations inconsistent | Yes |  |
2836(i) | Resolved | 27.4.3 [basic.string] | More string operations should be `noexcept` | Yes | 2 |
2318(i) | Resolved | 27.4.3 [basic.string] | `basic_string`'s wording has confusing relics from the copy-on-write era | Yes | 4 |
2391(i) | Resolved | 27.4.3 [basic.string] | `basic_string` is missing non-`const` `data()` | Yes | 3 |
718(i) | NAD Editorial | 27.4.3 [basic.string] | `basic_string` is not a sequence | Yes |  |
3165(i) | NAD | 27.4.3 [basic.string] | All `starts_with()` overloads should be called "`begins_with`" | Yes | 2 |
2372(i) | NAD | 27.4.3 [basic.string] | Assignment from int to `std::string` | Yes | 4 |
4(i) | NAD | 27.4.3 [basic.string] | `basic_string` `size_type` and `difference_type` should be implementation defined | Yes |  |
614(i) | NAD | 27.4.3 [basic.string] | `std::string` allocator requirements still inconsistent | Yes |  |
2084(i) | NAD | 27.4.3 [basic.string] | `basic_string` use of `charT*` | Yes |  |
4029(i) | New | 27.4.3.1 [basic.string.general] | `basic_string` accidentally fails to meet the reversible container requirements | Yes | 3 |
3650(i) | C++23 | 27.4.3.1 [basic.string.general] | Are `std::basic_string`'s `iterator` and `const_iterator` constexpr iterators? | Yes |  |
2861(i) | C++17 | 27.4.3.2 [string.require] | `basic_string` should require that `charT` match `traits::char_type` | Yes |  |
2760(i) | C++17 | 27.4.3.2 [string.require] | non-const `basic_string::data` should not invalidate iterators | Yes |  |
2003(i) | C++14 | 27.4.3.2 [string.require] | String exception inconsistency in erase. | Yes | 0 |
847(i) | C++11 | 27.4.3.2 [string.require] | string exception safety guarantees | Yes |  |
301(i) | CD1 | 27.4.3.2 [string.require] | basic_string template ctor effects clause omits allocator argument | Yes |  |
86(i) | TC1 | 27.4.3.2 [string.require] | String constructors don't describe exceptions | Yes |  |
2151(i) | Resolved | 27.4.3.2 [string.require] | `basic_string<>::swap` semantics ignore allocators | Yes | 3 |
466(i) | NAD | 27.4.3.2 [string.require] | `basic_string` ctor should prevent null pointer error | Yes |  |
3663(i) | New | 27.4.3.3 [string.cons] | `basic_string(const T&, const Alloc&)` turns moves into copies | Yes | 3 |
2946(i) | C++20 | 27.4.3.3 [string.cons] | LWG 2758's resolution missed further corrections | Yes | 2 |
3076(i) | C++20 | 27.4.3.3 [string.cons] | `basic_string` CTAD ambiguity | Yes |  |
2742(i) | C++17 | 27.4.3.3 [string.cons] | Inconsistent `string` interface taking `string_view` | Yes | 1 |
2583(i) | C++17 | 27.4.3.3 [string.cons] | There is no way to supply an allocator for `basic_string(str, pos)` | Yes | 0 |
2069(i) | C++14 | 27.4.3.3 [string.cons] | Inconsistent exception spec for `basic_string` move constructor | Yes |  |
2235(i) | C++14 | 27.4.3.3 [string.cons] | Undefined behavior without proper requirements on `basic_string` constructors | Yes |  |
3111(i) | Resolved | 27.4.3.3 [string.cons] | Too strong precondition on `basic_string` constructor | Yes | 2 |
3033(i) | NAD Editorial | 27.4.3.3 [string.cons] | `basic_string` move ctor is underspecified | Yes |  |
2402(i) | NAD | 27.4.3.3 [string.cons] | `basic_string(const basic_string& str, size_type pos, size_type n = npos)` shouldn't use `Allocator()` | Yes | 3 |
2319(i) | NAD | 27.4.3.3 [string.cons] | `basic_string`'s move constructor should not be `noexcept` | Yes | 1 |
2822(i) | NAD | 27.4.3.3 [string.cons] | Resolution for LWG 2742 introduces ambiguities | Yes |  |
2580(i) | NAD | 27.4.3.3 [string.cons] | Who is definitive: `operator=` or `assign`? | Yes | 4 |
3311(i) | Dup | 27.4.3.3 [string.cons] | `basic_string::operator=(charT c)` should be constrained | Yes |  |
1192(i) | C++11 | 27.4.3.4 [string.iterators] | `basic_string` missing definitions for `cbegin` / `cend` / `crbegin` / `crend` | Yes |  |
3645(i) | C++23 | 27.4.3.5 [string.capacity] | `resize_and_overwrite` is overspecified to call its callback with lvalues | Yes | 2 |
3004(i) | C++20 | 27.4.3.5 [string.capacity] | §[string.capacity] and §[vector.capacity] should specify time complexity for `capacity()` | Yes | 0 |
2834(i) | C++17 | 27.4.3.5 [string.capacity] | Resolution LWG 2223 is missing wording about end iterators | Yes | 0 |
259(i) | CD1 | 27.4.3.5 [string.capacity] | `basic_string::operator[]` and const correctness | Yes |  |
2968(i) | Resolved | 27.4.3.5 [string.capacity] | Inconsistencies between `basic_string reserve` and `vector/unordered_map/unordered_set reserve` functions | Yes | 3 |
3579(i) | NAD | 27.4.3.5 [string.capacity] | Complexity guarantees for `resize()` and `append()` functions across the library | Yes | 3 |
104(i) | NAD | 27.4.3.5 [string.capacity] | Description of basic_string::operator[] is unclear | Yes |  |
4378(i) | New | 27.4.3.6 [string.access] | Inconsistency between `std::basic_string`'s `data()` and `operator[]` specification | Yes | 4 |
2475(i) | C++17 | 27.4.3.6 [string.access] | Allow overwriting of `std::basic_string` terminator with `charT()` to allow cleaner interoperation with legacy APIs | Yes | 3 |
2207(i) | C++14 | 27.4.3.6 [string.access] | `basic_string::at` should not have a Requires clause | Yes |  |
84(i) | NAD | 27.4.3.6 [string.access] | Ambiguity with string::insert() | Yes |  |
3662(i) | New | 27.4.3.7.2 [string.append] | `basic_string::append/assign(NTBS, pos, n)` suboptimal | Yes | 3 |
2788(i) | C++17 | 27.4.3.7.2 [string.append] | `basic_string` range mutators unintentionally require a default constructible allocator | Yes | 2 |
2758(i) | C++17 | 27.4.3.7.3 [string.assign] | `std::string{}.assign("ABCDE", 0, 1)` is ambiguous | Yes | 1 |
2579(i) | C++17 | 27.4.3.7.3 [string.assign] | Inconsistency wrt Allocators in `basic_string` assignment vs. `basic_string::assign` | Yes | 0 |
2929(i) | Resolved | 27.4.3.7.3 [string.assign] | `basic_string` misuses "Effects: Equivalent to" | Yes | 3 |
141(i) | TC1 | 27.4.3.7.4 [string.insert] | basic_string::find_last_of, find_last_not_of say pos instead of xpos | Yes |  |
2757(i) | Resolved | 27.4.3.7.4 [string.insert] | `std::string{}.insert(3, "ABCDE", 0, 1)` is ambiguous | Yes | 1 |
88(i) | NAD | 27.4.3.7.4 [string.insert] | Inconsistency between string::insert() and string::append() | Yes |  |
377(i) | NAD | 27.4.3.7.4 [string.insert] | basic_string::insert and length_error | Yes |  |
89(i) | Dup | 27.4.3.7.4 [string.insert] | Missing throw specification for string::insert() and string::replace() | Yes |  | 83
428(i) | CD1 | 27.4.3.7.5 [string.erase] | string::erase(iterator) validity | Yes |  |
27(i) | TC1 | 27.4.3.7.5 [string.erase] | String::erase(range) yields wrong iterator | Yes |  |
1323(i) | C++11 | 27.4.3.7.6 [string.replace] | `basic_string::replace` should use `const_iterator` | Yes |  |
368(i) | NAD Editorial | 27.4.3.7.6 [string.replace] | basic_string::replace has two "Throws" paragraphs | Yes |  |
403(i) | CD1 | 27.4.3.7.8 [string.swap] | basic_string::swap should not throw exceptions | Yes |  |
535(i) | CD1 | 27.4.3.7.8 [string.swap] | std::string::swap specification poorly worded | Yes |  |
5(i) | TC1 | 27.4.3.7.8 [string.swap] | String::compare specification questionable | Yes |  | 87
87(i) | Dup | 27.4.3.7.8 [string.swap] | Error in description of string::compare() | Yes |  | 5
4259(i) | New | 27.4.3.8.2 [string.find] | P1148R0 changed the return values of searching functions of `std::basic_string` on some platforms | Yes | 3 |
4261(i) | New | 27.4.3.8.2 [string.find] | P1206R7 broke uses of container adaptors with old custom sequence containers | No | 3 |
3752(i) | NAD | 27.4.3.8.3 [string.substr] | Should `string::substr` forward the allocator to the newly created string? | Yes |  |
2771(i) | C++17 | 27.4.3.8.4 [string.compare] | Broken Effects of some `basic_string::compare` functions in terms of `basic_string_view` | Yes | 1 |
1138(i) | C++11 | 27.4.4.1 [string.op.plus] | Unusual return value for `operator+` | Yes |  |
2852(i) | NAD | 27.4.4.2 [string.cmp] | Specifications of `operator==` for `std::basic_string`s and `std::basic_string_view`s are difficult to conform to | Yes | 2 |
2011(i) | C++14 | 27.4.4.4 [string.io] | Unexpected output required of strings | Yes |  |
91(i) | CD1 | 27.4.4.4 [string.io] | Description of operator>> and getline() for string<> might cause endless loop | Yes |  |
435(i) | CD1 | 27.4.4.4 [string.io] | bug in DR 25 | Yes |  |
586(i) | CD1 | 27.4.4.4 [string.io] | string inserter not a formatted function | Yes |  |
824(i) | CD1 | 27.4.4.4 [string.io] | rvalue ref issue with `basic_string` inserter | Yes |  |
25(i) | TC1 | 27.4.4.4 [string.io] | String operator<< uses width() value wrong | Yes |  | 67
90(i) | TC1 | 27.4.4.4 [string.io] | Incorrect description of operator >> for strings | Yes |  |
211(i) | TC1 | 27.4.4.4 [string.io] | operator>>(istream&, string&) doesn't set failbit | Yes |  |
2535(i) | NAD | 27.4.4.4 [string.io] | Inconsistency between `ostream::write` and `ostream::operator<<` | Yes | 2 |
67(i) | Dup | 27.4.4.4 [string.io] | Setw useless for strings | Yes |  | 25
3837(i) | New | 27.4.4.5 [string.erasure] | `std::erase_if` overloads for non-associative containers should move (and not copy) their predicate object | Yes | 3 |
2403(i) | C++17 | 27.4.5 [string.conversions] | `stof()` should call `strtof()` and `wcstof()` | Yes | 2 |
2009(i) | C++14 | 27.4.5 [string.conversions] | Reporting out-of-bound values on numeric string conversions | Yes |  |
1261(i) | C++11 | 27.4.5 [string.conversions] | Insufficent overloads for `to_string` / `to_wstring` | Yes |  |
771(i) | CD1 | 27.4.5 [string.conversions] | Impossible throws clause in [string.conversions] | Yes |  |
772(i) | CD1 | 27.4.5 [string.conversions] | Impossible return clause in [string.conversions] | Yes |  |
2270(i) | NAD | 27.4.5 [string.conversions] | Inconsistent `to_string` overloads | Yes |  |
3705(i) | C++23 | 27.4.6 [basic.string.hash] | Hashability shouldn't depend on `basic_string`'s allocator | Yes |  |
2978(i) | C++20 | 27.4.6 [basic.string.hash] | Hash support for `pmr::string` and friends | Yes | 0 |
2355(i) | NAD | 27.4.7 [basic.string.literals] | `"s"` UDL suffix should be reserved for a compile-time string library type | Yes | 1 |
2237(i) | New | 27.5 [c.strings] | `<cuchar>` macros | No | 4 |
2238(i) | Open | 27.5 [c.strings] | Problematic iterator-pair constructor of containers | No | 3 |
2482(i) | C++17 | 27.5 [c.strings] | §[c.strings] Table 73 mentions nonexistent functions | Yes |  |
345(i) | CD1 | 27.5 [c.strings] | type tm in <cwchar> | Yes |  |
615(i) | NAD Editorial | 27.5 [c.strings] | Inconsistencies in Section 21.4 | Yes |  |
4064(i) | WP | 27.5.1 [cstring.syn] | Clarify that `std::launder` is not needed when using the result of `std::memcpy` | Yes | 3 |

## Section 28 (290 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
3266(i) | C++20 | 28.2.1 [charconv.syn] | `to_chars(bool)` should be deleted | Yes | 0 |
3373(i) | C++20 | 28.2.1 [charconv.syn] | `{to,from}_chars_result` and `format_to_n_result` need the "we really mean what we say" wording | Yes | 0 |
4421(i) | New | 28.2.2 [charconv.to.chars] | Clarify the output encoding of `to_chars` for integers | Yes | 3 |
4430(i) | New | 28.2.3 [charconv.from.chars] | `from_chars` should not parse `"0b"` base prefixes | Yes |  |
3456(i) | New | 28.2.3 [charconv.from.chars] | Pattern used by `std::from_chars` is underspecified | Yes | 3 |
3082(i) | Open | 28.2.3 [charconv.from.chars] | `from_chars` specification regarding floating point rounding is inconsistent | Yes | 2 |
3081(i) | Open | 28.2.3 [charconv.from.chars] | Floating point `from_chars` API does not distinguish between overflow and underflow | Yes | 2 |
3080(i) | C++20 | 28.2.3 [charconv.from.chars] | Floating point `from_chars` pattern specification breaks round-tripping | Yes | 0 |
317(i) | CD1 | 28.3 [localization] | Instantiation vs. specialization of facets | Yes |  |
495(i) | CD1 | 28.3 [localization] | Clause 22 template parameter requirements | Yes |  |
708(i) | NAD | 28.3 [localization] | Locales need to be per thread and updated for POSIX changes | Yes |  |
1082(i) | NAD Concepts | 28.3 [localization] | `codecvt` needs to be a concept-constrained template | Yes |  |
1083(i) | NAD Concepts | 28.3 [localization] | `InputIterator` and `OutputIterator` template parameters need to be concept constraints | Yes |  |
1298(i) | C++11 | 28.3.2 [locale.syn] | Missing specialization of `ctype_byname<char>` | Yes |  |
3353(i) | New | 28.3.3.1 [locale] | `locale`'s copy assignment operator should return `locale&` | Yes | 3 |
268(i) | CD1 | 28.3.3.1 [locale] | Typo in locale synopsis | Yes |  |
360(i) | CD1 | 28.3.3.1 [locale] | locale mandates inefficient implementation | Yes |  |
31(i) | TC1 | 28.3.3.1 [locale] | Immutable locale values | Yes |  | 378
37(i) | TC1 | 28.3.3.1 [locale] | Leftover "global" reference | Yes |  |
137(i) | TC1 | 28.3.3.1 [locale] | Do use_facet and has_facet look in the global locale? | Yes |  |
330(i) | NAD | 28.3.3.1 [locale] | Misleading "exposition only" value in class locale definition | Yes |  |
378(i) | Dup | 28.3.3.1 [locale] | locale immutability and locale::operator=() | Yes |  | 31
3767(i) | WP | 28.3.3.1.2.1 [locale.category] | `codecvt<charN_t, char8_t, mbstate_t>` incorrectly added to locale | Yes | 3 |
327(i) | CD1 | 28.3.3.1.2.1 [locale.category] | Typo in time_get facet in table 52 | Yes |  | 447
340(i) | CD1 | 28.3.3.1.2.1 [locale.category] | interpretation of `has_facet<Facet>(loc)` | Yes |  |
347(i) | CD1 | 28.3.3.1.2.1 [locale.category] | locale::category and bitmask requirements | Yes |  |
21(i) | TC1 | 28.3.3.1.2.1 [locale.category] | Codecvt_byname<> instantiations | Yes |  |
30(i) | TC1 | 28.3.3.1.2.1 [locale.category] | Wrong header for LC_* | Yes |  |
121(i) | NAD | 28.3.3.1.2.1 [locale.category] | Detailed definition for ctype<wchar_t> specialization | Yes |  |
502(i) | NAD | 28.3.3.1.2.1 [locale.category] | Proposition: Clarification of the interaction between a facet and an iterator | Yes |  |
447(i) | Dup | 28.3.3.1.2.1 [locale.category] | Wrong template argument for time facets | Yes |  | 327
2694(i) | C++17 | 28.3.3.1.2.2 [locale.facet] | Application of LWG 436 accidentally deleted definition of "facet" | Yes | 3 |
436(i) | CD1 | 28.3.3.1.2.2 [locale.facet] | are cv-qualified facet types valid facets? | Yes |  |
2295(i) | C++23 | 28.3.3.1.3 [locale.cons] | Locale name when the provided `Facet` is a `nullptr` | Yes | 3 |
3673(i) | Resolved | 28.3.3.1.3 [locale.cons] | §[locale.cons] Ambiguous argument in Throws for locale+name+category constructor | Yes | 3 |
3676(i) | Resolved | 28.3.3.1.3 [locale.cons] | Name of locale composed using `std::locale::none` | Yes | 3 |
3674(i) | New | 28.3.3.1.4 [locale.members] | Removal of requirement for locale names for construction of locales not explained | Yes | 2 |
2394(i) | C++17 | 28.3.3.1.4 [locale.members] | `locale::name` specification unclear — what is implementation-defined? | Yes | 3 |
14(i) | TC1 | 28.3.3.1.4 [locale.members] | Locale::combine should be const | Yes |  |
15(i) | TC1 | 28.3.3.1.4 [locale.members] | Locale::name requirement inconsistent | Yes |  |
452(i) | NAD | 28.3.3.1.4 [locale.members] | locale::combine should be permitted to generate a named locale | Yes |  |
8(i) | TC1 | 28.3.3.1.6 [locale.statics] | Locale::global lacks guarantee | Yes |  |
38(i) | TC1 | 28.3.3.2 [locale.global.templates] | Facet definition incomplete | Yes |  |
2019(i) | C++11 | 28.3.3.3.1 [classification] | `isblank` not supported by `std::locale` | Yes |  |
391(i) | CD1 | 28.3.3.3.2 [conversions.character] | non-member functions specified as const | Yes |  |
228(i) | CD1 | 28.3.4 [locale.categories] | Incorrect specification of "..._byname" facets | Yes |  |
338(i) | CD1 | 28.3.4 [locale.categories] | is whitespace allowed between `-' and a digit? | Yes |  |
439(i) | NAD | 28.3.4 [locale.categories] | Should facets be copyable? | Yes |  |
503(i) | NAD | 28.3.4 [locale.categories] | more on locales | Yes |  |
585(i) | NAD | 28.3.4 [locale.categories] | facet error reporting | Yes |  |
339(i) | CD1 | 28.3.4.2 [category.ctype] | definition of bitmask type restricted to clause 27 | Yes |  |
356(i) | NAD | 28.3.4.2 [category.ctype] | Meaning of ctype_base::mask enumerators | Yes |  |
4037(i) | WP | 28.3.4.2.1 [category.ctype.general] | Static data members of `ctype_base` are not yet required to be usable in constant expressions | Yes |  |
473(i) | C++11 | 28.3.4.2.2 [locale.ctype] | underspecified `ctype` calls | Yes |  |
379(i) | CD1 | 28.3.4.2.2.3 [locale.ctype.virtuals] | nonsensical ctype::do_widen() requirement | Yes |  |
126(i) | TC1 | 28.3.4.2.2.3 [locale.ctype.virtuals] | typos in Effects clause of ctype::do_narrow() | Yes |  |
152(i) | TC1 | 28.3.4.2.2.3 [locale.ctype.virtuals] | Typo in `scan_is()` semantics | Yes |  |
417(i) | NAD | 28.3.4.2.2.3 [locale.ctype.virtuals] | what does `ctype::do_widen()` return on failure | Yes |  |
616(i) | CD1 | 28.3.4.2.3 [locale.ctype.byname] | missing 'typename' in ctype_byname | Yes |  |
124(i) | TC1 | 28.3.4.2.3 [locale.ctype.byname] | ctype_byname<charT>::do_scan_is & do_scan_not return type should be const charT* | Yes |  |
695(i) | CD1 | 28.3.4.2.4 [facet.ctype.special] | ctype<char>::classic_table() not accessible | Yes |  |
153(i) | CD1 | 28.3.4.2.4.3 [facet.ctype.char.members] | Typo in `narrow()` semantics | Yes |  | 207
28(i) | TC1 | 28.3.4.2.4.3 [facet.ctype.char.members] | Ctype<char>is ambiguous | Yes |  | 236
207(i) | Dup | 28.3.4.2.4.3 [facet.ctype.char.members] | ctype<char> members return clause incomplete | Yes |  | 153
236(i) | Dup | 28.3.4.2.4.3 [facet.ctype.char.members] | ctype<char>::is() member modifies facet | Yes |  | 28
76(i) | CD1 | 28.3.4.2.5 [locale.codecvt] | Can a `codecvt` facet always convert one internal character at a time? | Yes |  |
75(i) | TC1 | 28.3.4.2.5 [locale.codecvt] | Contradiction in `codecvt::length`'s argument types | Yes |  |
16(i) | TC1 | 28.3.4.2.5 [locale.codecvt] | Bad ctype_byname<char> decl | Yes |  |
19(i) | TC1 | 28.3.4.2.5 [locale.codecvt] | "Noconv" definition too vague | Yes |  | 10
24(i) | TC1 | 28.3.4.2.5 [locale.codecvt] | "do_convert" doesn't exist | Yes |  | 72
33(i) | TC1 | 28.3.4.2.5 [locale.codecvt] | Codecvt<> mentions from_type | Yes |  | 43
74(i) | TC1 | 28.3.4.2.5 [locale.codecvt] | Garbled text for `codecvt::do_max_length` | Yes |  |
138(i) | NAD | 28.3.4.2.5 [locale.codecvt] | Class `ctype_byname<char>` redundant and misleading | Yes |  |
382(i) | NAD | 28.3.4.2.5 [locale.codecvt] | codecvt do_in/out result | Yes |  |
72(i) | Dup | 28.3.4.2.5 [locale.codecvt] | Do_convert phantom member function | Yes |  | 24
4287(i) | New | 28.3.4.2.5.3 [locale.codecvt.virtuals] | §[locale.codecvt.virtuals] `do_in` and `do_out` could do with better specification | Yes | 3 |
3337(i) | New | 28.3.4.2.5.3 [locale.codecvt.virtuals] | What is "is initialized" supposed to mean? | No | 3 |
664(i) | CD1 | 28.3.4.2.5.3 [locale.codecvt.virtuals] | `do_unshift` for `codecvt<char, char, mbstate_t>` | Yes |  |
665(i) | CD1 | 28.3.4.2.5.3 [locale.codecvt.virtuals] | `do_unshift` return value | Yes |  |
393(i) | NAD Editorial | 28.3.4.2.5.3 [locale.codecvt.virtuals] | do_in/do_out operation on state unclear | Yes |  |
305(i) | CD1 | 28.3.4.2.6 [locale.codecvt.byname] | Default behavior of codecvt<wchar_t, char, mbstate_t>::length() | Yes |  |
380(i) | CD1 | 28.3.4.2.6 [locale.codecvt.byname] | typos in codecvt tables 53 and 54 | Yes |  |
381(i) | CD1 | 28.3.4.2.6 [locale.codecvt.byname] | detection of invalid mbstate_t in codecvt | Yes |  |
302(i) | NAD | 28.3.4.2.6 [locale.codecvt.byname] | Need error indication from codecvt<>::do_length | Yes |  |
500(i) | NAD | 28.3.4.2.6 [locale.codecvt.byname] | do_length cannot be implemented correctly | Yes |  |
10(i) | Dup | 28.3.4.2.6 [locale.codecvt.byname] | Codecvt<>::do unclear | Yes |  | 19
43(i) | Dup | 28.3.4.2.6 [locale.codecvt.byname] | Locale table correction | Yes |  | 33
344(i) | NAD | 28.3.4.3 [category.numeric] | grouping + showbase | Yes |  |
275(i) | CD1 | 28.3.4.3.2.2 [facet.num.get.members] | Wrong type in num_get::get() overloads | Yes |  |
18(i) | TC1 | 28.3.4.3.2.2 [facet.num.get.members] | Get(...bool&) omitted | Yes |  |
4163(i) | Tentatively NAD | 28.3.4.3.2.3 [facet.num.get.virtuals] | Can the overload of `std::num_get::do_get` for `bool` call the overload for `long`? | No |  |
3689(i) | New | 28.3.4.3.2.3 [facet.num.get.virtuals] | `num_get` overflow determination unclear and incorrect | No | 3 |
3214(i) | New | 28.3.4.3.2.3 [facet.num.get.virtuals] | §[facet.num.get.virtuals] doesn't say what it means for digit grouping to be consistent | No | 4 |
2381(i) | C++23 | 28.3.4.3.2.3 [facet.num.get.virtuals] | Inconsistency in parsing floating point numbers | Yes | 2 |
1169(i) | C++17 | 28.3.4.3.2.3 [facet.num.get.virtuals] | `num_get` not fully compatible with `strto*` | Yes | 3 |
427(i) | C++11 | 28.3.4.3.2.3 [facet.num.get.virtuals] | Stage 2 and rationale of DR 221 | Yes |  |
2041(i) | C++11 | 28.3.4.3.2.3 [facet.num.get.virtuals] | Stage 2 accumulate incompatibilty | Yes |  |
23(i) | CD1 | 28.3.4.3.2.3 [facet.num.get.virtuals] | Num_get overflow result | Yes |  |
221(i) | CD1 | 28.3.4.3.2.3 [facet.num.get.virtuals] | num_get<>::do_get stage 2 processing broken | Yes |  |
321(i) | CD1 | 28.3.4.3.2.3 [facet.num.get.virtuals] | Typo in num_get | Yes |  |
358(i) | CD1 | 28.3.4.3.2.3 [facet.num.get.virtuals] | interpreting `thousands_sep` after a `decimal_point` | Yes |  |
17(i) | TC1 | 28.3.4.3.2.3 [facet.num.get.virtuals] | Bad bool parsing | Yes |  |
154(i) | TC1 | 28.3.4.3.2.3 [facet.num.get.virtuals] | Missing `double` specifier for `do_get()` | Yes |  |
459(i) | NAD | 28.3.4.3.2.3 [facet.num.get.virtuals] | Requirement for widening in stage 2 is overspecification | Yes |  |
662(i) | NAD | 28.3.4.3.2.3 [facet.num.get.virtuals] | Inconsistent handling of incorrectly-placed thousands separators | Yes |  |
826(i) | NAD | 28.3.4.3.3 [locale.nm.put] | Equivalent of `%'d`, or rather, lack thereof? | Yes |  |
359(i) | CD1 | 28.3.4.3.3.2 [facet.num.put.members] | num_put<>::do_put (..., bool) undocumented | Yes |  |
4216(i) | New | 28.3.4.3.3.3 [facet.num.put.virtuals] | `num_put::do_put` and `void` pointers | Yes | 3 |
2703(i) | New | 28.3.4.3.3.3 [facet.num.put.virtuals] | No provision for fill-padding when `boolalpha` is set | No | 3 |
2702(i) | New | 28.3.4.3.3.3 [facet.num.put.virtuals] | `num_put::do_put(..., bool)` performs ill-formed `do_put` call | No | 3 |
2117(i) | Open | 28.3.4.3.3.3 [facet.num.put.virtuals] | `ios_base` manipulators should have `showgrouping/noshowgrouping` | No | 3 |
4084(i) | WP | 28.3.4.3.3.3 [facet.num.put.virtuals] | `std::fixed` ignores `std::uppercase` | Yes | 3 |
2293(i) | C++14 | 28.3.4.3.3.3 [facet.num.put.virtuals] | Wrong facet used by `num_put::do_put` | Yes | 0 |
671(i) | C++11 | 28.3.4.3.3.3 [facet.num.put.virtuals] | precision of `hexfloat` | Yes |  |
1152(i) | C++11 | 28.3.4.3.3.3 [facet.num.put.virtuals] | Expressions parsed differently than intended | Yes |  |
231(i) | CD1 | 28.3.4.3.3.3 [facet.num.put.virtuals] | Precision in iostream? | Yes |  |
282(i) | CD1 | 28.3.4.3.3.3 [facet.num.put.virtuals] | What types does numpunct grouping refer to? | Yes |  |
34(i) | TC1 | 28.3.4.3.3.3 [facet.num.put.virtuals] | True/falsename() not in ctype<> | Yes |  |
361(i) | NAD | 28.3.4.3.3.3 [facet.num.put.virtuals] | num_get<>::do_get (..., void*&) checks grouping | Yes |  |
20(i) | TC1 | 28.3.4.4.1.3 [facet.numpunct.virtuals] | Thousands_sep returns wrong type | Yes |  |
318(i) | CD1 | 28.3.4.4.2 [locale.numpunct.byname] | Misleading comment in definition of numpunct_byname | Yes |  |
248(i) | CD1 | 28.3.4.6 [category.time] | time_get fails to set eofbit | Yes |  |
71(i) | TC1 | 28.3.4.6.2 [locale.time.get] | Do_get_monthname synopsis missing argument | Yes |  |
4285(i) | New | 28.3.4.6.2.2 [locale.time.get.members] | `time_get::do_get_date` is problematic even after LWG 461 | Yes | 3 |
3275(i) | New | 28.3.4.6.2.3 [locale.time.get.virtuals] | Why does `time_get::do_get` require a valid pointer when none of the others do? | Yes | 3 |
2512(i) | Open | 28.3.4.6.2.3 [locale.time.get.virtuals] | Y2K bites; what is an "unambiguous year identifier"? | No | 4 |
461(i) | CD1 | 28.3.4.6.2.3 [locale.time.get.virtuals] | time_get hard or impossible to implement | Yes |  |
164(i) | TC1 | 28.3.4.6.4.3 [locale.time.put.virtuals] | do_put() has apparently unused fill argument | Yes |  |
836(i) | C++11 | 28.3.4.7.2.3 [locale.money.get.virtuals] | Effects of `money_base::space` and `money_base::none` on `money_get` | Yes |  | 670
667(i) | NAD | 28.3.4.7.2.3 [locale.money.get.virtuals] | `money_get`'s widened minus sign | Yes |  |
668(i) | NAD | 28.3.4.7.2.3 [locale.money.get.virtuals] | `money_get`'s empty minus sign | Yes |  |
669(i) | NAD | 28.3.4.7.2.3 [locale.money.get.virtuals] | Equivalent postive and negative signs in `money_get` | Yes |  |
2983(i) | New | 28.3.4.7.3.3 [locale.money.put.virtuals] | `money_put::do_put` underspecified | Yes | 3 |
328(i) | CD1 | 28.3.4.7.3.3 [locale.money.put.virtuals] | Bad sprintf format modifier in money_put<>::do_put() | Yes |  |
2691(i) | New | 28.3.4.7.4 [locale.moneypunct] | `money_base::space` and `do_put`: U+0020 versus `fill` | Yes | 3 |
670(i) | Dup | 28.3.4.7.4 [locale.moneypunct] | `money_base::pattern` and `space` | Yes |  | 836
374(i) | NAD | 28.3.4.7.4.2 [locale.moneypunct.members] | moneypunct::frac_digits returns int not unsigned | Yes |  |
325(i) | CD1 | 28.3.4.7.4.3 [locale.moneypunct.virtuals] | Misleading text in moneypunct<>::do_grouping | Yes |  |
666(i) | CD1 | 28.3.4.7.4.3 [locale.moneypunct.virtuals] | `moneypunct::do_curr_symbol()` | Yes |  |
326(i) | NAD | 28.3.4.7.5 [locale.moneypunct.byname] | Missing typedef in moneypunct_byname | Yes |  |
2028(i) | C++14 | 28.3.4.8.2 [locale.messages] | `messages_base::catalog` overspecified | Yes |  |
4043(i) | WP | 28.4.2.2 [text.encoding.general] | `"ASCII"` is not a registered character encoding | Yes |  |
4038(i) | WP | 28.4.2.5 [text.encoding.aliases] | `std::text_encoding::aliases_view` should have constexpr iterators | Yes |  |
4263(i) | New | 28.5 [format] | What should `std::format_to` etc. behave when the output is overlong? | No | 3 |
3651(i) | New | 28.5 [format] | Unspecified lifetime guarantees for the format string | No | 3 |
3997(i) | New | 28.5.1 [format.syn] | `std::formatter` specializations should be consistently restricted to supported character types | No | 4 |
3641(i) | New | 28.5.1 [format.syn] | Add `operator==` to `format_to_n_result` | Yes | 3 |
3243(i) | C++20 | 28.5.2 [format.string] | `std::format` and negative zeroes | Yes | 2 |
3251(i) | C++20 | 28.5.2 [format.string] | Are `std::format` alignment specifiers applied to string arguments? | Yes | 2 |
3939(i) | New | 28.5.2.2 [format.string.std] | §[format.string.std] `char` is not formatted as a character when `charT` is `wchar_t` | No | 3 |
3644(i) | New | 28.5.2.2 [format.string.std] | `std::format` does not define "integer presentation type" | Yes | 2 |
3586(i) | New | 28.5.2.2 [format.string.std] | Formatting character alignment inconsistencies | Yes | 2 |
4090(i) | Open | 28.5.2.2 [format.string.std] | Underspecified use of locale facets for locale-dependent `std::format` | Yes | 3 |
3612(i) | C++23 | 28.5.2.2 [format.string.std] | Inconsistent pointer alignment in `std::format` | Yes |  |
3648(i) | C++23 | 28.5.2.2 [format.string.std] | `format` should not print `bool` with `'c'` | Yes |  |
3720(i) | C++23 | 28.5.2.2 [format.string.std] | Restrict the valid types of arg-id for width and precision in std-format-spec | Yes | 2 |
3721(i) | C++23 | 28.5.2.2 [format.string.std] | Allow an arg-id with a value of zero for width in std-format-spec | Yes | 3 |
3242(i) | C++20 | 28.5.2.2 [format.string.std] | `std::format`: missing rules for `arg-id` in `width` and `precision` | Yes | 1 |
3248(i) | C++20 | 28.5.2.2 [format.string.std] | `std::format` `#b`, `#B`, `#o`, `#x`, and `#X` presentation types misformat negative numbers | Yes | 2 |
3250(i) | C++20 | 28.5.2.2 [format.string.std] | `std::format`: `#` (alternate form) for NaN and inf | Yes | 0 |
3290(i) | C++20 | 28.5.2.2 [format.string.std] | Are `std::format` field widths code units, code points, or something else? | Yes |  |
3327(i) | C++20 | 28.5.2.2 [format.string.std] | Format alignment specifiers vs. text direction | Yes | 0 |
3412(i) | Resolved | 28.5.2.2 [format.string.std] | §[format.string.std] references to "Unicode encoding" unclear | Yes | 3 |
3576(i) | Resolved | 28.5.2.2 [format.string.std] | Clarifying fill character in `std::format` | Yes | 2 |
3639(i) | Resolved | 28.5.2.2 [format.string.std] | Handling of fill character width is underspecified in `std::format` | Yes | 3 |
3780(i) | Resolved | 28.5.2.2 [format.string.std] | `format`'s width estimation is too approximate and not forward compatible | Yes | 3 |
4078(i) | New | 28.5.5 [format.functions] | What if arguments alias the output buffer in `std::format_to`? | No | 4 |
3539(i) | C++23 | 28.5.5 [format.functions] | `format_to` must not copy models of `output_iterator<const charT&>` | Yes |  |
3619(i) | C++23 | 28.5.5 [format.functions] | Specification of `vformat_to` contains ill-formed `formatted_size` calls | Yes |  |
3340(i) | C++20 | 28.5.5 [format.functions] | Formatting functions should throw on argument/format string mismatch in §[format.functions] | Yes |  |
3372(i) | C++20 | 28.5.5 [format.functions] | `vformat_to` should not try to deduce `Out` twice | Yes | 0 |
3336(i) | Resolved | 28.5.5 [format.functions] | How does `std::vformat` handle exception thrown by formatters? | Yes | 2 |
3993(i) | New | 28.5.6.1 [formatter.requirements] | The `parse` function of a BasicFormatter type needs to be `constexpr` | Yes | 3 |
3462(i) | C++23 | 28.5.6.1 [formatter.requirements] | §[formatter.requirements]: Formatter requirements forbid use of `fc.arg()` | Yes | 3 |
3636(i) | C++23 | 28.5.6.1 [formatter.requirements] | `formatter<T>::format` should be `const`-qualified | Yes | 1 |
3776(i) | NAD | 28.5.6.1 [formatter.requirements] | Avoid parsing format-spec if it is not present or empty | Yes | 3 |
4240(i) | New | 28.5.6.3 [format.formattable] | The formattable type is not a `formattable` type | Yes | 2 |
3943(i) | New | 28.5.6.3 [format.formattable] | Clarify lifetime requirements of BasicFormatter and Formatter | Yes | 3 |
3925(i) | WP | 28.5.6.3 [format.formattable] | Concept `formattable`'s definition is incorrect | Yes |  |
3806(i) | NAD | 28.5.6.3 [format.formattable] | Should concept `formattable<T, charT>` default to `char`? | Yes | 2 |
4146(i) | New | 28.5.6.4 [format.formatter.spec] | §[format.formatter.spec]/3 unconditionally enables nonlocking for container adaptors | Yes | 2 |
3706(i) | New | 28.5.6.4 [format.formatter.spec] | How does `std::format` work with character arrays of unknown bound? | No | 3 |
4284(i) | LEWG | 28.5.6.4 [format.formatter.spec] | Integer-class types should be formattable | Yes | 3 |
3944(i) | WP | 28.5.6.4 [format.formatter.spec] | Formatters converting sequences of `char` to sequences of `wchar_t` | Yes | 3 |
3701(i) | C++23 | 28.5.6.4 [format.formatter.spec] | Make `formatter<remove_cvref_t<const charT[N]>, charT>` requirement explicit | Yes |  |
3833(i) | C++23 | 28.5.6.4 [format.formatter.spec] | Remove specialization `template<size_t N> struct formatter<const charT[N], charT>` | Yes | 2 |
3965(i) | WP | 28.5.6.5 [format.string.escaped] | Incorrect example in [format.string.escaped] p3 for formatting of combining characters | Yes |  |
4142(i) | WP | 28.5.6.6 [format.parse.ctx] | `format_parse_context::check_dynamic_spec` should require at least one type | Yes |  |
3825(i) | C++23 | 28.5.6.6 [format.parse.ctx] | Missing compile-time argument `id` check in `basic_format_parse_context::next_arg_id` | Yes |  |
4061(i) | WP | 28.5.6.7 [format.context] | Should `std::basic_format_context` be default-constructible/copyable/movable? | Yes |  |
3975(i) | WP | 28.5.6.7 [format.context] | Specializations of `basic_format_context` should not be permitted | Yes | 3 |
3567(i) | C++23 | 28.5.6.7 [format.context] | Formatting move-only iterators take two | Yes |  |
3654(i) | C++23 | 28.5.6.7 [format.context] | `basic_format_context::arg(size_t)` should be `noexcept` | Yes |  |
4221(i) | New | 28.5.7 [format.range] | Cannot format const-iterable only ranges | No | 2 |
4246(i) | Tentatively NAD | 28.5.7.2 [format.range.formatter] | Redundant constraint in `range_formatter::format` | Yes |  |
3892(i) | WP | 28.5.7.2 [format.range.formatter] | Incorrect formatting of nested ranges and tuples | Yes | 2 |
3839(i) | C++23 | 28.5.7.2 [format.range.formatter] | `range_formatter`'s `set_separator`, `set_brackets`, and `underlying` functions should be `noexcept` | Yes |  |
4107(i) | New | 28.5.7.4 [format.range.fmtmap] | Map formatter may conflict with user-defined specializations of `pair`/`tuple` formatters | Yes | 3 |
3540(i) | C++23 | 28.5.8.1 [format.arg] | §[format.arg] There should be no `const` in `basic_format_arg(const T* p)` | Yes |  |
3542(i) | C++23 | 28.5.8.1 [format.arg] | `basic_format_arg` mis-handles `basic_string_view` with custom traits | Yes |  |
3631(i) | C++23 | 28.5.8.1 [format.arg] | `basic_format_arg(T&&)` should use `remove_cvref_t<T>` throughout | Yes | 3 |
3246(i) | C++20 | 28.5.8.1 [format.arg] | What are the constraints on the template parameter of `basic_format_arg`? | Yes | 0 |
3371(i) | C++20 | 28.5.8.1 [format.arg] | `visit_format_arg` and `make_format_args` are not hidden friends | Yes | 0 |
3718(i) | Resolved | 28.5.8.1 [format.arg] | P2418R2 broke the overload resolution for `std::basic_format_arg` | Yes | 2 |
3544(i) | C++23 | 28.5.8.2 [format.arg.store] | `format-arg-store::args` is unintentionally not exposition-only | Yes | 3 |
4106(i) | WP | 28.5.8.3 [format.args] | `basic_format_args` should not be default-constructible | Yes |  |
3473(i) | C++23 | 28.5.8.3 [format.args] | Normative encouragement in non-normative note | Yes | 0 |
3810(i) | C++23 | 28.5.8.3 [format.args] | CTAD for `std::basic_format_args` | Yes | 3 |
4399(i) | Tentatively Ready | 28.5.9 [format.tuple] | `enable_nonlocking_formatter_optimization` for `pair` and `tuple` needs `remove_cvref_t` | Yes |  |
2490(i) | New | 28.6 [re] | `<regex>` needs lots of `noexcept` | No | 3 |
523(i) | Open | 28.6 [re] | regex case-insensitive character ranges are unimplementable as specified | No | 4 |
524(i) | CD1 | 28.6 [re] | regex named character classes and case-insensitivity don't mix | Yes |  |
1142(i) | NAD Concepts | 28.6 [re] | Regular expressions library not concept enabled | Yes |  |
3835(i) | New | 28.6.1 [re.general] | Requirements for `CharT` in the regex library | No | 4 |
3606(i) | New | 28.6.2 [re.req] | Missing `regex_traits::locale_type` requirements | No | 3 |
2431(i) | New | 28.6.2 [re.req] | Missing regular expression traits requirements | No | 3 |
2329(i) | C++14 | 28.6.3 [re.syn] | `regex_match()/regex_search()` with `match_results` should forbid temporary strings | Yes | 2 |
1263(i) | NAD | 28.6.3 [re.syn] | missing `swap` overloads for `regex` | Yes |  |
3998(i) | New | 28.6.4 [re.const] | Constants in `std::regex_constants` should be allowed to be enumerators | No | 3 |
2053(i) | C++14 | 28.6.4 [re.const] | Errors in `regex` bitmask types | Yes |  |
2331(i) | Open | 28.6.4.2 [re.synopt] | `regex_constants::collate`'s effects are inaccurately summarized | Yes | 3 |
2503(i) | C++17 | 28.6.4.2 [re.synopt] | multiline option should be added to `syntax_option_type` | Yes | 2 |
2359(i) | C++14 | 28.6.4.2 [re.synopt] | How does `regex_constants::nosubs` affect `basic_regex::mark_count()`? | Yes | 0 |
2330(i) | C++14 | 28.6.4.2 [re.synopt] | `regex("meow", regex::icase)` is technically forbidden but should be permitted | Yes | 0 |
3605(i) | New | 28.6.4.3 [re.matchflag] | `regex_constants::match_prev_avail` is underspecified | No | 3 |
1450(i) | C++14 | 28.6.4.3 [re.matchflag] | Contradiction in `regex_constants` | Yes | 3 |
2338(i) | Open | 28.6.6 [re.traits] | §[re.traits]/7 expects of locale facets something not guaranteed by [locale.facet]/4 | Yes | 3 |
4186(i) | WP | 28.6.6 [re.traits] | `regex_traits::transform_primary` mistakenly detects `typeid` of a function | Yes |  |
2018(i) | C++14 | 28.6.6 [re.traits] | [CD] `regex_traits::isctype` Returns clause is wrong | Yes |  |
2271(i) | C++14 | 28.6.6 [re.traits] | `regex_traits::lookup_classname` specification unclear | Yes |  |
1337(i) | C++11 | 28.6.6 [re.traits] | Swapped arguments in `regex_traits::isctype` | Yes |  |
3261(i) | New | 28.6.7 [re.regex] | `regex` components' `noexcept` annotations appear broken for POCMA or throwing `BidirectionalIterator` | No | 3 |
3296(i) | C++20 | 28.6.7 [re.regex] | Inconsistent default argument for `basic_regex<>::assign` | Yes | 0 |
723(i) | C++11 | 28.6.7 [re.regex] | `basic_regex` should be moveable | Yes |  |
2029(i) | C++11 | 28.6.7 [re.regex] | Missing '`noexcept`' on `basic_regex` move-assignment operator | Yes |  |
628(i) | CD1 | 28.6.7 [re.regex] | Inconsistent definition of basic_regex constructor | Yes |  |
1396(i) | NAD | 28.6.7 [re.regex] | `regex` should support allocators | Yes |  | 1451
1451(i) | Dup | 28.6.7 [re.regex] | `regex` should support allocators | Yes |  | 1396
3341(i) | New | 28.6.7.2 [re.regex.construct] | `basic_regex` range constructor: Missing requirements for iterator types | No | 3 |
3630(i) | New | 28.6.7.2 [re.regex.construct] | Inconsistent `basic_regex` construction and assignment from iterator range | No | 4 |
3603(i) | New | 28.6.7.2 [re.regex.construct] | Matching of null characters by regular expressions is underspecified | No | 3 |
3604(i) | New | 28.6.7.2 [re.regex.construct] | What is the effect of an invalid value of type `syntax_option_type`? | No | 3 |
1014(i) | C++11 | 28.6.7.2 [re.regex.construct] | `basic_regex` should be created/assigned from initializer lists | Yes |  |
682(i) | CD1 | 28.6.7.2 [re.regex.construct] | basic_regex ctor takes InputIterator or ForwardIterator? | Yes |  |
2137(i) | Open | 28.6.7.3 [re.regex.assign] | Misleadingly constrained post-condition in the presence of exceptions | Yes | 3 |
2001(i) | C++11 | 28.6.7.3 [re.regex.assign] | Class template `basic_regex` uses non existent `string_type` | Yes |  |
3126(i) | New | 28.6.8 [re.submatch] | There's no `std::sub_match::compare(string_view)` overload | Yes | 3 |
3204(i) | C++23 | 28.6.8 [re.submatch] | `sub_match::swap` only swaps the base class | Yes | 3 |
1180(i) | C++11 | 28.6.8.2 [re.submatch.members] | Missing `string_type` member typedef in class `sub_match` | Yes |  |
2217(i) | C++17 | 28.6.8.3 [re.submatch.op] | `operator==(sub_match, string)` slices on embedded `'\0'`s | Yes | 2 |
1181(i) | C++11 | 28.6.8.3 [re.submatch.op] | Invalid `sub_match` comparison operators | Yes |  |
681(i) | CD1 | 28.6.8.3 [re.submatch.op] | Operator functions impossible to compare are defined in [re.submatch.op] | Yes |  |
2195(i) | C++23 | 28.6.9 [re.results] | Missing constructors for `match_results` | Yes | 3 |
2589(i) | C++17 | 28.6.9 [re.results] | `match_results` can't satisfy the requirements of a container | Yes | 3 |
2306(i) | C++14 | 28.6.9 [re.results] | `match_results::reference` should be `value_type&`, not `const value_type&` | Yes | 4 |
645(i) | NAD Editorial | 28.6.9 [re.results] | Missing members in match_results | Yes |  |
684(i) | NAD Editorial | 28.6.9 [re.results] | Unclear which members of match_results should be used in comparison | Yes |  |
3800(i) | NAD | 28.6.9.1 [re.results.general] | No deduction guide for `std::match_results` | Yes |  |
2191(i) | C++23 | 28.6.9.2 [re.results.const] | Incorrect specification of `match_results(match_results&&)` | Yes | 4 |
2183(i) | C++20 | 28.6.9.2 [re.results.const] | Muddled allocator requirements for `match_results` constructors | Yes | 3 |
2184(i) | C++20 | 28.6.9.2 [re.results.const] | Muddled allocator requirements for `match_results` assignments | Yes | 3 |
1209(i) | C++11 | 28.6.9.2 [re.results.const] | `match_results` should be moveable | Yes |  |
1453(i) | Resolved | 28.6.9.5 [re.results.acc] | Default constructed `match_results` behavior for certain operations | Yes |  |
1452(i) | NAD | 28.6.9.5 [re.results.acc] | "target sequence" is not defined | Yes |  |
646(i) | CD1 | 28.6.9.6 [re.results.form] | const incorrect match_result members | Yes |  |
2002(i) | Resolved | 28.6.9.9 [re.results.nonmember] | Class template `match_results` does not specify the semantics of `operator==` | Yes |  |
2273(i) | C++17 | 28.6.10.2 [re.alg.match] | `regex_match` ambiguity | Yes | 2 |
2205(i) | C++14 | 28.6.10.2 [re.alg.match] | Problematic postconditions of `regex_match` and `regex_search` | Yes | 0 |
647(i) | NAD Editorial | 28.6.10.3 [re.alg.search] | Inconsistent `regex_search` params | Yes |  |
2216(i) | New | 28.6.10.4 [re.alg.replace] | `regex_replace(basic_string)` allocator handling | No | 3 |
2213(i) | C++14 | 28.6.10.4 [re.alg.replace] | Return value of `std::regex_replace` | Yes | 0 |
727(i) | C++11 | 28.6.10.4 [re.alg.replace] | `regex_replace()` doesn't accept `basic_string`s with custom traits and allocators | Yes |  |
726(i) | NAD | 28.6.10.4 [re.alg.replace] | Missing `regex_replace()` overloads | Yes |  |
2332(i) | C++14 | 28.6.11 [re.iter] | `regex_iterator/regex_token_iterator` should forbid temporary regexes | Yes | 2 |
3698(i) | Resolved | 28.6.11 [re.iter] | `regex_iterator` and `join_view` don't work together very well | Yes | 2 |
652(i) | CD1 | 28.6.11.1 [re.regiter] | regex_iterator and const correctness | Yes |  |
648(i) | NAD Editorial | 28.6.11.1.2 [re.regiter.cnstr] | regex_iterator c'tor needs clarification/editorial fix | Yes |  |
909(i) | C++11 | 28.6.11.2 [re.tokiter] | `regex_token_iterator` should use `initializer_list` | Yes |  |
650(i) | CD1 | 28.6.11.2 [re.tokiter] | regex_token_iterator and const correctness | Yes |  |
683(i) | NAD Editorial | 28.6.11.2 [re.tokiter] | regex_token_iterator summary error | Yes |  |
3129(i) | C++20 | 28.6.11.2.2 [re.tokiter.cnstr] | `regex_token_iterator` constructor uses wrong pointer arithmetic | Yes | 0 |
651(i) | CD1 | 28.6.11.2.2 [re.tokiter.cnstr] | Missing preconditions for regex_token_iterator c'tors | Yes |  |
649(i) | NAD Editorial | 28.6.11.2.2 [re.tokiter.cnstr] | Several typos in regex_token_iterator constructors | Yes |  |
2220(i) | Open | 28.6.11.2.3 [re.tokiter.comp] | Under-specification of `operator==` for `regex_token_iterator` | Yes | 3 |
2546(i) | New | 28.6.12 [re.grammar] | Implementability of locale-sensitive UnicodeEscapeSequence matching | No | 4 |
2986(i) | New | 28.6.12 [re.grammar] | Handling of multi-character collating elements by the `regex` FSM is underspecified | No | 4 |
2987(i) | New | 28.6.12 [re.grammar] | Relationship between `traits_inst.lookup_collatename` and the `regex` FSM is underspecified with regards to `ClassAtomCollatingElement` | No | 3 |
2584(i) | C++17 | 28.6.12 [re.grammar] | `<regex>` ECMAScript `IdentityEscape` is ambiguous | Yes | 2 |
716(i) | C++11 | 28.6.12 [re.grammar] | Production in [re.grammar] not actually modified | Yes |  |
2343(i) | Resolved | 28.6.12 [re.grammar] | Is the value of the ECMA-262 RegExp object's multiline property really false? | Yes | 2 |

## Section 29 (210 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
860(i) | C++11 | 29 [numerics] | Floating-Point State | Yes |  |
1140(i) | NAD Concepts | 29 [numerics] | Numerics library not concept enabled | Yes |  |
3133(i) | C++20 | 29.2 [numeric.requirements] | Modernizing numeric type requirements | Yes | 0 |
2699(i) | C++17 | 29.2 [numeric.requirements] | Missing restriction in [numeric.requirements] | Yes | 3 |
3905(i) | WP | 29.3.1 [cfenv.syn] | Type of `std::fexcept_t` | Yes |  |
4161(i) | New | 29.4 [complex.numbers] | Some free functions don't automatically work for program-defined `std::complex<NonFloatingPoint>` | No | 3 |
387(i) | CD1 | 29.4 [complex.numbers] | `std::complex` over-encapsulated | Yes |  |
2693(i) | Resolved | 29.4 [complex.numbers] | `constexpr` for various `std::complex` arithmetic and value operators | Yes | 3 |
1154(i) | NAD | 29.4 [complex.numbers] | `complex` should accept integral types | Yes |  |
1217(i) | NAD | 29.4 [complex.numbers] | Quaternion support | Yes |  |
388(i) | NAD | 29.4 [complex.numbers] | Use of `complex` as a key in associative containers | Yes |  |
79(i) | TC1 | 29.4.2 [complex.syn] | Inconsistent declaration of polar() | Yes |  |
80(i) | TC1 | 29.4.2 [complex.syn] | Global Operators of complex declared twice | Yes |  |
3933(i) | New | 29.4.3 [complex] | P1467R9 accidentally changed the signatures of certain constructors of `std::complex` | Yes | 4 |
3934(i) | New | 29.4.3 [complex] | `std::complex<T>::operator=(const T&)` has no specification | Yes | 3 |
3935(i) | WP | 29.4.3 [complex] | `template<class X> constexpr complex& operator=(const complex<X>&)` has no specification | Yes |  |
2714(i) | New | 29.4.6 [complex.ops] | `complex` stream extraction underspecified | Yes | 3 |
629(i) | CD1 | 29.4.6 [complex.ops] | `complex<T>` insertion and locale dependence | Yes |  |
146(i) | TC1 | 29.4.6 [complex.ops] | complex<T> Inserter and Extractor need sentries | Yes |  |
177(i) | NAD | 29.4.6 [complex.ops] | Complex operators cannot be explicitly instantiated | Yes |  |
2870(i) | C++20 | 29.4.7 [complex.value.ops] | Default value of parameter `theta` of `polar` should be dependent | Yes |  |
2459(i) | C++17 | 29.4.7 [complex.value.ops] | `std::polar` should require a non-negative rho | Yes | 0 |
1435(i) | C++11 | 29.4.7 [complex.value.ops] | Unclear returns specifications for C99 complex number functions | Yes |  |
595(i) | CD1 | 29.4.7 [complex.value.ops] | TR1/C++0x: `fabs(complex<T>)` redundant / wrongly specified | Yes |  |
781(i) | CD1 | 29.4.7 [complex.value.ops] | `std::complex` should add missing C99 functions | Yes |  |
2597(i) | C++20 | 29.4.8 [complex.transcendentals] | `std::log` misspecified for complex numbers | Yes | 3 |
440(i) | NAD | 29.4.8 [complex.transcendentals] | Should std::complex use unqualified transcendentals? | Yes |  |
2846(i) | New | 29.4.10 [cmplx.over] | Undefined phrase "effectively cast" | Yes | 3 |
4191(i) | WP | 29.4.10 [cmplx.over] | P1467 changed the return type of `pow(complex<float>, int)` | Yes |  |
1137(i) | C++11 | 29.4.10 [cmplx.over] | Return type of `conj` and `proj` | Yes |  |
1522(i) | C++11 | 29.4.10 [cmplx.over] | `conj` specification is now nonsense | Yes |  |
844(i) | CD1 | 29.4.10 [cmplx.over] | `complex pow` return type is ambiguous | Yes |  |
507(i) | CD1 | 29.5 [rand] | Missing requirement for variate_generator::operator() | Yes |  |
699(i) | CD1 | 29.5 [rand] | N2111 changes min/max | Yes |  |
506(i) | NAD | 29.5 [rand] | Requirements of Distribution parameter for variate_generator | Yes |  |
547(i) | NAD | 29.5 [rand] | division should be floating-point, not integer | Yes |  |
572(i) | NAD | 29.5 [rand] | Oops, we gave 507 WP status | Yes |  |
1056(i) | NAD | 29.5 [rand] | Must all Engines and Distributions be Streamable? | Yes |  |
1057(i) | NAD Concepts | 29.5 [rand] | `RandomNumberEngineAdaptor` | Yes |  |
656(i) | NAD Editorial | 29.5.2 [rand.synopsis] | Typo in subtract_with_carry_engine declaration | Yes |  |
515(i) | NAD | 29.5.2 [rand.synopsis] | Random number engine traits | Yes |  |
505(i) | CD1 | 29.5.3 [rand.req] | Result_type in random distribution requirements | Yes |  |
504(i) | NAD Editorial | 29.5.3 [rand.req] | Integer types in pseudo-random number engine requirements | Yes |  |
517(i) | NAD | 29.5.3 [rand.req] | Should include name in external representation | Yes |  |
4109(i) | New | 29.5.3.1 [rand.req.genl] | Instantiating templates in §[rand] with `int8_t`/`uint8_t` is undefined behavior | Yes | 3 |
2326(i) | NAD | 29.5.3.1 [rand.req.genl] | `uniform_int_distribution<unsigned char>` should be permitted | Yes | 2 |
4289(i) | LEWG | 29.5.3.2 [rand.req.seedseq] | Seed sequence is overspecified | Yes | 3 |
2181(i) | C++17 | 29.5.3.2 [rand.req.seedseq] | Exceptions from seed sequence operations | Yes | 3 |
2124(i) | NAD | 29.5.3.2 [rand.req.seedseq] | Seed sequence over-specified | Yes |  |
3150(i) | C++20 | 29.5.3.3 [rand.req.urng] | `UniformRandomBitGenerator` should validate `min` and `max` | Yes | 3 |
2154(i) | Resolved | 29.5.3.3 [rand.req.urng] | What exactly does compile-time complexity imply? | Yes | 4 |
2327(i) | NAD | 29.5.3.3 [rand.req.urng] | Non-power-of-two URNGs should be forbidden | Yes |  |
654(i) | CD1 | 29.5.3.4 [rand.req.eng] | Missing IO roundtrip for random number engines | Yes |  |
678(i) | CD1 | 29.5.3.4 [rand.req.eng] | Changes for [rand.req.eng] | Yes |  |
729(i) | NAD | 29.5.3.4 [rand.req.eng] | Problem in [rand.req.eng]/3 | Yes |  |
730(i) | NAD | 29.5.3.5 [rand.req.adapt] | Comment on [rand.req.adapt]/3 e) | Yes |  |
1235(i) | NAD | 29.5.3.6 [rand.req.dist] | Issue with C++0x random number proposal | Yes |  |
733(i) | NAD | 29.5.3.6 [rand.req.dist] | Comment on [rand.req.dist]/9 | Yes |  |
3519(i) | C++23 | 29.5.4 [rand.eng] | Incomplete synopses for `<random>` classes | Yes | 3 |
1436(i) | C++11 | 29.5.4 [rand.eng] | Random number engine constructor concerns | Yes |  |
512(i) | NAD Editorial | 29.5.4 [rand.eng] | Seeding `subtract_with_carry_01` from a single unsigned long | Yes |  |
513(i) | NAD Editorial | 29.5.4 [rand.eng] | Size of state for subtract_with_carry_01 | Yes |  |
516(i) | NAD Editorial | 29.5.4 [rand.eng] | Seeding subtract_with_carry_01 using a generator | Yes |  |
2351(i) | NAD | 29.5.4 [rand.eng] | Does `.seed()` completely reset state of engine? | Yes | 2 |
1437(i) | C++11 | 29.5.4.3 [rand.eng.mers] | Mersenne twister meaningless for word sizes less than two | Yes |  |
728(i) | CD1 | 29.5.4.3 [rand.eng.mers] | Problem in [rand.eng.mers]/6 | Yes |  |
799(i) | NAD | 29.5.4.3 [rand.eng.mers] | Mersenne twister equality overspecified | Yes |  |
3809(i) | WP | 29.5.4.4 [rand.eng.sub] | Is `std::subtract_with_carry_engine<uint16_t>` supposed to work? | Yes | 3 |
4014(i) | WP | 29.5.4.4 [rand.eng.sub] | LWG 3809 changes behavior of some existing `std::subtract_with_carry_engine` code | Yes | 2 |
514(i) | NAD Editorial | 29.5.4.4 [rand.eng.sub] | Size of state for subtract_with_carry | Yes |  |
4212(i) | New | 29.5.4.5 [rand.eng.philox] | Make the round states in [rand.eng.philox] explicit | Yes | 3 |
4224(i) | WP | 29.5.4.5 [rand.eng.philox] | Philox engines should be freestanding | Yes |  |
4134(i) | WP | 29.5.4.5 [rand.eng.philox] | Issue with Philox algorithm specification | Yes | 1 |
4153(i) | WP | 29.5.4.5 [rand.eng.philox] | Fix extra "-1" for `philox_engine::max()` | Yes |  |
3561(i) | C++23 | 29.5.5.2 [rand.adapt.disc] | Issue with internal counter in `discard_block_engine` | Yes |  |
1438(i) | C++11 | 29.5.5.2 [rand.adapt.disc] | No definition for `base()` | Yes |  |
738(i) | NAD Editorial | 29.5.5.2 [rand.adapt.disc] | Editorial issue in [rand.adapt.disc]/3 | Yes |  |
609(i) | CD1 | 29.5.5.3 [rand.adapt.ibits] | missing static const | Yes |  |
508(i) | CD1 | 29.5.6 [rand.predef] | Bad parameters for ranlux64_base_01 | Yes |  |
796(i) | NAD | 29.5.6 [rand.predef] | `ranlux48_base` returns wrong value | Yes |  |
797(i) | NAD | 29.5.6 [rand.predef] | `ranlux48` returns wrong value | Yes |  |
802(i) | NAD | 29.5.6 [rand.predef] | `knuth_b` returns wrong value | Yes |  |
548(i) | NAD | 29.5.7 [rand.device] | May random_device block? | Yes |  |
1068(i) | NAD | 29.5.7 [rand.device] | class `random_device` should be movable | Yes |  |
3422(i) | C++23 | 29.5.8.1 [rand.util.seedseq] | Issues of `seed_seq`'s constructors | Yes | 3 |
2440(i) | C++17 | 29.5.8.1 [rand.util.seedseq] | `seed_seq::size()` should be `noexcept` | Yes | 0 |
2180(i) | C++14 | 29.5.8.1 [rand.util.seedseq] | Exceptions from `std::seed_seq` operations | Yes |  |
607(i) | CD1 | 29.5.8.1 [rand.util.seedseq] | Concern about short seed vectors | Yes |  |
608(i) | CD1 | 29.5.8.1 [rand.util.seedseq] | Unclear seed_seq construction details | Yes |  |
677(i) | CD1 | 29.5.8.1 [rand.util.seedseq] | Weaknesses in seed_seq::randomize [rand.util.seedseq] | Yes |  |
712(i) | CD1 | 29.5.8.1 [rand.util.seedseq] | `seed_seq::size` no longer useful | Yes |  |
782(i) | CD1 | 29.5.8.1 [rand.util.seedseq] | Extended `seed_seq` constructor is useless | Yes |  |
800(i) | Resolved | 29.5.8.1 [rand.util.seedseq] | Issues in 26.4.7.1 [rand.util.seedseq](6) | Yes |  |
803(i) | Resolved | 29.5.8.1 [rand.util.seedseq] | Simplification of `seed_seq::seq_seq` | Yes |  |
2352(i) | NAD | 29.5.8.1 [rand.util.seedseq] | Is a default-constructed `std::seed_seq` intended to produce a predictable `.generate()`? | Yes | 2 |
731(i) | NAD | 29.5.8.1 [rand.util.seedseq] | proposal for a customizable `seed_seq` | Yes |  |
1069(i) | NAD | 29.5.8.1 [rand.util.seedseq] | class `seed_seq` should support efficient move operations | Yes |  |
1313(i) | NAD | 29.5.8.1 [rand.util.seedseq] | Seed sequence's param function not useful for pure output iterator | Yes |  |
655(i) | CD1 | 29.5.8.2 [rand.util.canonical] | Signature of generate_canonical not useful | Yes |  |
739(i) | NAD | 29.5.8.2 [rand.util.canonical] | Defect in [rand.util.canonical]/3 | Yes |  |
549(i) | NAD Editorial | 29.5.9 [rand.dist] | Undefined variable in binomial_distribution | Yes |  |
511(i) | NAD | 29.5.9 [rand.dist] | Input_type for binomial_distribution | Yes |  |
509(i) | NAD | 29.5.9.2 [rand.dist.uni] | Uniform_int template parameters | Yes |  |
773(i) | NAD | 29.5.9.2 [rand.dist.uni] | issues with random | Yes |  |
2168(i) | C++17 | 29.5.9.2.2 [rand.dist.uni.real] | Inconsistent specification of `uniform_real_distribution` constructor | Yes | 3 |
510(i) | NAD | 29.5.9.3 [rand.dist.bern] | Input_type for bernoulli_distribution | Yes |  |
735(i) | NAD | 29.5.9.3.2 [rand.dist.bern.bin] | Unfortunate naming | Yes |  |
3402(i) | New | 29.5.9.3.4 [rand.dist.bern.negbin] | Wording for `negative_binomial_distribution` is unclear as a consequence of LWG 2406 resolution | No | 3 |
2406(i) | C++17 | 29.5.9.3.4 [rand.dist.bern.negbin] | `negative_binomial_distribution` should reject `p == 1` | Yes | 3 |
2524(i) | Resolved | 29.5.9.4.2 [rand.dist.pois.exp] | `generate_canonical` can occasionally return 1.0 | Yes | 2 |
734(i) | CD1 | 29.5.9.5.3 [rand.dist.norm.chisq] | Unnecessary restriction in [rand.dist.norm.chisq] | Yes |  |
793(i) | Resolved | 29.5.9.6.1 [rand.dist.samp.discrete] | `discrete_distribution` missing constructor | Yes |  |
874(i) | Resolved | 29.5.9.6.1 [rand.dist.samp.discrete] | Missing `initializer_list` constructor for `discrete_distribution` | Yes |  |
736(i) | NAD | 29.5.9.6.1 [rand.dist.samp.discrete] | Comment on [rand.dist.samp.discrete] | Yes |  |
4052(i) | New | 29.5.9.6.2 [rand.dist.samp.pconst] | Bogus requirements for `piecewise_linear_distribution` | Yes | 4 |
1439(i) | C++11 | 29.5.9.6.2 [rand.dist.samp.pconst] | Return from `densities()` functions? | Yes |  |
792(i) | CD1 | 29.5.9.6.2 [rand.dist.samp.pconst] | `piecewise_constant_distribution` is undefined for a range with just one endpoint | Yes |  |
794(i) | Resolved | 29.5.9.6.2 [rand.dist.samp.pconst] | `piecewise_constant_distribution` missing constructor | Yes |  |
875(i) | Resolved | 29.5.9.6.2 [rand.dist.samp.pconst] | Missing `initializer_list` constructor for `piecewise_constant_distribution` | Yes |  |
737(i) | NAD | 29.5.9.6.2 [rand.dist.samp.pconst] | Comment on [rand.dist.samp.pconst] | Yes |  |
791(i) | NAD | 29.5.9.6.2 [rand.dist.samp.pconst] | `piecewise_constant_distribution::densities` has wrong name | Yes |  |
1440(i) | C++11 | 29.5.9.6.3 [rand.dist.samp.plinear] | Incorrect specification for `piecewise_linear_distribution` | Yes |  |
2058(i) | C++14 | 29.6 [numarray] | `valarray` and `begin/end` | Yes |  |
621(i) | CD1 | 29.6 [numarray] | non-const copy assignment operators of helper arrays | Yes |  |
93(i) | NAD | 29.6 [numarray] | Incomplete Valarray Subset Definitions | Yes |  |
125(i) | TC1 | 29.6.2 [template.valarray] | valarray<T>::operator!() return type is inconsistent | Yes |  |
107(i) | NAD | 29.6.2 [template.valarray] | Valarray constructor is strange | Yes |  |
630(i) | C++11 | 29.6.2.2 [valarray.cons] | arrays of `valarray` | Yes |  |
1208(i) | C++11 | 29.6.2.2 [valarray.cons] | `valarray initializer_list` constructor has incorrect effects | Yes |  |
253(i) | CD1 | 29.6.2.2 [valarray.cons] | valarray helper functions are almost entirely useless | Yes |  |
620(i) | CD1 | 29.6.2.2 [valarray.cons] | valid uses of empty valarrays | Yes |  |
867(i) | NAD Editorial | 29.6.2.2 [valarray.cons] | Valarray and value-initialization | Yes |  |
2071(i) | C++14 | 29.6.2.3 [valarray.assign] | `std::valarray` move-assignment | Yes |  |
624(i) | CD1 | 29.6.2.3 [valarray.assign] | `valarray` assignment and arrays of unequal length | Yes |  |
389(i) | CD1 | 29.6.2.4 [valarray.access] | Const overload of valarray::operator[] returns by value | Yes |  | 77
636(i) | NAD Editorial | 29.6.2.4 [valarray.access] | 26.5.2.3 valarray::operator[] | Yes |  |
717(i) | NAD Editorial | 29.6.2.4 [valarray.access] | Incomplete `valarray::operator[]` specification in [valarray.access] | Yes |  |
77(i) | Dup | 29.6.2.4 [valarray.access] | Valarray operator[] const returning value | Yes |  | 389
430(i) | C++11 | 29.6.2.5 [valarray.sub] | `valarray` subset operations | Yes |  |
188(i) | NAD | 29.6.2.7 [valarray.cassign] | valarray helpers missing augmented assignment operators | Yes |  |
1243(i) | NAD | 29.6.2.7 [valarray.cassign] | Missing `operator+= (initializer_list<T>)` for `valarray` | Yes |  |
618(i) | CD1 | 29.6.2.8 [valarray.members] | valarray::cshift() effects on empty array | Yes |  |
3074(i) | C++20 | 29.6.3 [valarray.nonmembers] | Non-member functions for `valarray` should only deduce from the `valarray` | Yes | 0 |
3964(i) | New | 29.6.3.3 [valarray.transcend] | `std::atan2` and `std::pow` overloads that take two `std::valarray` parameters should require the arguments to have the same length | Yes | 4 |
543(i) | CD1 | 29.6.4 [class.slice] | valarray slice default constructor | Yes |  |
2423(i) | New | 29.6.5 [template.slice.array] | Missing specification `slice_array`, `gslice_array`, `mask_array`, `indirect_array` copy constructor | Yes | 4 |
106(i) | TC1 | 29.6.5 [template.slice.array] | Numeric library private members are implementation defined | Yes |  |
81(i) | NAD | 29.6.5 [template.slice.array] | Wrong declaration of slice operations | Yes |  |
123(i) | CD1 | 29.6.5.4 [slice.arr.fill] | Should valarray helper arrays fill functions be const? | Yes |  |
2115(i) | Open | 29.6.8 [template.mask.array] | Undefined behaviour for `valarray` assignments with `mask_array` index? | No | 4 |
3693(i) | New | 29.7 [c.math] | §[c.math] Can any of `float/double/long double` overloads be fused into template overloads? | No | 2 |
2192(i) | C++17 | 29.7 [c.math] | Validity and return type of `std::abs(0u)` is unclear | Yes | 2 |
2735(i) | C++17 | 29.7 [c.math] | `std::abs(short)`, `std::abs(signed char)` and others should return `int` instead of `double` in order to be compatible with C++98 and C | Yes | 3 |
2086(i) | C++14 | 29.7 [c.math] | Overly generic type support for math functions | Yes |  |
1134(i) | C++11 | 29.7 [c.math] | Redundant specification of `<stdint.h>`, `<fenv.h>`, `<tgmath.h>`, and maybe `<complex.h>` | Yes |  |
1441(i) | C++11 | 29.7 [c.math] | Floating-point test functions are incorrectly specified | Yes |  |
295(i) | CD1 | 29.7 [c.math] | Is abs defined in <cmath>? | Yes |  |
395(i) | CD1 | 29.7 [c.math] | inconsistencies in the definitions of rand() and random_shuffle() | Yes |  |
550(i) | CD1 | 29.7 [c.math] | What should the return type of `pow(float,int)` be? | Yes |  |
722(i) | CD1 | 29.7 [c.math] | Missing [c.math] functions `nanf` and `nanl` | Yes |  |
2294(i) | Resolved | 29.7 [c.math] | `<cstdlib>` should declare `abs(double)` | Yes | 2 |
1327(i) | Resolved | 29.7 [c.math] | templates defined in `<cmath>` replacing C macros with the same name | Yes |  |
637(i) | NAD Editorial | 29.7 [c.math] | §[c.math]/10 inconsistent return values | Yes |  |
357(i) | NAD Editorial | 29.7 [c.math] | <cmath> float functions cannot return HUGE_VAL | Yes |  |
690(i) | NAD Editorial | 29.7 [c.math] | abs(long long) should return long long | Yes |  |
213(i) | NAD | 29.7 [c.math] | Math function overloads ambiguous | Yes |  |
289(i) | NAD | 29.7 [c.math] | <cmath> requirements missing C float and long double versions | Yes |  |
323(i) | NAD | 29.7 [c.math] | `abs()` overloads in different headers | Yes |  |
583(i) | NAD | 29.7 [c.math] | `div()` for unsigned integral types | Yes |  |
584(i) | NAD | 29.7 [c.math] | missing int `pow(int,int)` functionality | Yes |  |
2079(i) | NAD | 29.7 [c.math] | Required `pow()` overloads | Yes | 3 |
2474(i) | NAD | 29.7 [c.math] | `<cmath>` functions unfriendly to `integral_constant` arguments | Yes | 4 |
2847(i) | New | 29.7.1 [cmath.syn] | `sin(float)` should call `sinf(float)` | No | 3 |
2923(i) | New | 29.7.1 [cmath.syn] | `noexcept` is inconsistently applied across headers which import components of the C standard library | No | 4 |
3790(i) | C++23 | 29.7.1 [cmath.syn] | P1467 accidentally changed `nexttoward`'s signature | Yes | 1 |
3051(i) | C++20 | 29.7.1 [cmath.syn] | Floating point classifications were inadvertently changed in P0175 | Yes | 0 |
3223(i) | Resolved | 29.7.1 [cmath.syn] | `lerp` should not add the "sufficient additional overloads" | Yes | 2 |
3234(i) | Resolved | 29.7.1 [cmath.syn] | Sufficient Additional Special Math Overloads | Yes | 3 |
3093(i) | New | 29.7.2 [c.math.abs] | LWG 2294/2192 missed a `std::abs` overload | No | 3 |
3172(i) | New | 29.7.3 [c.math.hypot3] | 3-arg `std::hypot` is underspecified compared to the 2-arg overload | Yes | 3 |
3201(i) | C++20 | 29.7.4 [c.math.lerp] | `lerp` should be marked as `noexcept` | Yes | 2 |
3066(i) | New | 29.7.6 [sf.cmath] | "report a domain error" in [sf.cmath]/1 is underspecified | No | 3 |
4136(i) | Tentatively Ready | 29.9.3 [linalg.general] | Specify behavior of [linalg] Hermitian algorithms on diagonal with nonzero imaginary part | Yes |  |
4185(i) | New | 29.9.7 [linalg.helpers] | Ill-formed, no diagnostic required on runtime behavior | No | 3 |
4302(i) | LEWG | 29.9.13.8 [linalg.algs.blas1.ssq] | Problematic `vector_sum_of_squares` wording | Yes | 1 |
4315(i) | Ready | 29.9.13.9 [linalg.algs.blas1.nrm2] | Insufficient specification of `vector_two_norm` and `matrix_frob_norm` | Yes |  |
4137(i) | Ready | 29.9.14 [linalg.algs.blas2] | Fix Mandates, Preconditions, and Complexity elements of [linalg] algorithms | Yes |  |
4420(i) | New | 29.10 [simd] | §[simd] conversions (constructor, load, stores, gather, and scatter) are incorrectly constrained for `<stdfloat>` types | Yes | 1 |
4409(i) | New | 29.10 [simd] | Constant expression `ranges::size(r)` Constraints and Mandates in [simd] | Yes | 3 |
4414(i) | New | 29.10.2.2 [simd.expos.abi] | §[simd.expos.abi] `deduce-abi-t` is underspecified and incorrectly referenced from `rebind` and `resize` | Yes |  |
4412(i) | Tentatively Ready | 29.10.3 [simd.syn] | Fix declaration of `zero_element` and `uninit_element` | Yes |  |
4231(i) | WP | 29.10.3 [simd.syn] | `datapar::chunk<N>` should use `simd-size-type` instead of `size_t` | Yes |  |
4413(i) | Tentatively Ready | 29.10.4 [simd.traits] | Unused/left-over `simd::alignment` specialization for `basic_mask` | Yes |  |
4232(i) | WP | 29.10.4 [simd.traits] | `datapar::resize` does not resize | Yes |  |
4403(i) | Tentatively Ready | 29.10.7.2 [simd.ctor] | `simd::basic_vec` CTAD misses difference type casting | Yes |  |
4407(i) | Tentatively Ready | 29.10.7.2 [simd.ctor] | `constexpr-wrapper-like` needs `remove_cvref_t` in `simd::basic_vec` constructor | Yes |  |
4391(i) | Tentatively NAD | 29.10.7.2 [simd.ctor] | Ambiguities of `simd::basic_vec` constructor | Yes |  |
4390(i) | LEWG | 29.10.7.2 [simd.ctor] | `simd::basic_vec(U&&)` default template parameter | Yes | 4 |
4408(i) | LEWG | 29.10.7.3 [simd.subscr] | Hardening `simd::vec::operator[]` | Yes | 3 |
4230(i) | New | 29.10.8.4 [simd.complex.access] | `simd<complex>::real/imag` is overconstrained | Yes | 2 |
4280(i) | Tentatively Ready | 29.10.8.7 [simd.loadstore] | `simd::partial_load` uses undefined identifier `T` | Yes |  |
4392(i) | New | 29.10.8.7 [simd.loadstore] | `simd::unchecked_load` misses difference type casting | Yes | 3 |
4394(i) | New | 29.10.8.7 [simd.loadstore] | `simd::unchecked_load(I first, S last)` construct `span` maybe ill-formed | Yes | 3 |
4393(i) | New | 29.10.8.11 [simd.permute.memory] | `simd::unchecked_scatter_to` is underconstrained | Yes | 2 |
4386(i) | New | 29.10.8.13 [simd.alg] | `std::simd::select(bool c, const T& a, const U& b)` is underconstrained | Yes | 3 |
4375(i) | Tentatively Ready | 29.10.8.15 [simd.bit] | `std::simd::bit_ceil` should not be `noexcept` | Yes |  |
4402(i) | New | 29.10.9.1 [simd.mask.overview] | List-initialization of iterators in [simd.mask.overview] | Yes | 3 |
4382(i) | Tentatively Ready | 29.10.9.2 [simd.mask.ctor] | The `simd::basic_mask(bool)` overload needs to be more constrained | Yes |  |
4238(i) | New | 29.10.9.4 [simd.mask.unary] | `simd_mask<complex<double>>::operator+/-/~` return a disabled `simd` specialization | Yes | 1 |
4376(i) | New | 29.10.9.4 [simd.mask.unary] | ABI tag in return type of [simd.mask.unary] is overconstrained | Yes | 1 |

## Section 30 (96 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
786(i) | Resolved | 30 [time] | Thread library timed waits, UTC and monotonic clocks | Yes |  |
1032(i) | NAD Concepts | 30 [time] | Tome utility templates need to be concept-constrained | Yes |  |
2592(i) | New | 30.2 [time.syn] | Require that `chrono::duration_cast`s from smaller durations to larger durations do not overflow | Yes | 4 |
2278(i) | C++14 | 30.2 [time.syn] | User-defined literals for Standard Library types | Yes |  |
954(i) | C++11 | 30.3 [time.clock.req] | Various threading bugs #4 | Yes |  |
956(i) | C++11 | 30.3 [time.clock.req] | Various threading bugs #6 | Yes |  |
953(i) | Resolved | 30.3 [time.clock.req] | Various threading bugs #3 | Yes |  |
955(i) | NAD | 30.3 [time.clock.req] | Various threading bugs #5 | Yes |  |
951(i) | C++11 | 30.4.1 [time.traits.is.fp] | Various threading bugs #1 | Yes |  |
3123(i) | C++23 | 30.5 [time.duration] | `duration` constructor from representation shouldn't be effectively non-throwing | Yes | 3 |
934(i) | C++11 | 30.5 [time.duration] | `duration` is missing `operator%` | Yes |  |
1171(i) | C++11 | 30.5 [time.duration] | duration types should be literal | Yes |  |
1177(i) | C++11 | 30.5 [time.duration] | Improve "diagnostic required" wording | Yes |  |
2912(i) | Resolved | 30.5 [time.duration] | Add a deduction guide for class template `duration` | Yes |  |
3090(i) | Tentatively Ready | 30.5.2 [time.duration.cons] | What is §[time.duration.cons]p4's "no overflow is induced in the conversion" intended to mean? | Yes | 3 |
3050(i) | C++20 | 30.5.2 [time.duration.cons] | Conversion specification problem in `chrono::duration` constructor | Yes | 3 |
2094(i) | C++14 | 30.5.2 [time.duration.cons] | `duration` conversion overflow shouldn't participate in overload resolution | Yes |  |
974(i) | C++11 | 30.5.2 [time.duration.cons] | `duration<double>` should not implicitly convert to `duration<int>` | Yes |  |
3104(i) | C++20 | 30.5.6 [time.duration.nonmember] | Fixing `duration` division | Yes | 0 |
1271(i) | C++11 | 30.5.6 [time.duration.nonmember] | `CR` undefined in duration operators | Yes |  |
2004(i) | C++11 | 30.5.6 [time.duration.nonmember] | `duration::operator*` has template parameters in funny order | Yes |  |
2020(i) | C++11 | 30.5.6 [time.duration.nonmember] | Time utility arithmetic `constexpr` functions have invalid effects | Yes |  |
882(i) | CD1 | 30.5.6 [time.duration.nonmember] | `duration` non-member arithmetic requirements | Yes |  |
947(i) | Resolved | 30.5.6 [time.duration.nonmember] | `duration` arithmetic: contradictory requirements | Yes |  |
3503(i) | New | 30.5.8 [time.duration.cast] | `chrono::ceil` has surprising requirement | Yes | 3 |
952(i) | NAD Editorial | 30.5.8 [time.duration.cast] | Various threading bugs #2 | Yes |  |
946(i) | NAD | 30.5.8 [time.duration.cast] | `duration_cast` improperly specified | Yes |  |
2383(i) | Open | 30.5.9 [time.duration.literals] | Overflow cannot be ill-formed for chrono::duration integer literals | No | 3 |
3741(i) | NAD | 30.5.10 [time.duration.alg] | `std::chrono::abs(duration)` is ill-formed with non-reduced periods | Yes |  |
3536(i) | C++23 | 30.5.11 [time.duration.io] | Should `chrono::from_stream()` assign zero to `duration` for failure? | Yes |  |
3094(i) | C++20 | 30.5.11 [time.duration.io] | §[time.duration.io]p4 makes surprising claims about encoding | Yes | 0 |
3314(i) | C++20 | 30.5.11 [time.duration.io] | Is stream insertion behavior locale dependent when `Period::type` is `micro`? | Yes | 2 |
3317(i) | C++20 | 30.5.11 [time.duration.io] | Incorrect `operator<<` for floating-point durations | Yes | 0 |
3125(i) | Resolved | 30.5.11 [time.duration.io] | `duration` streaming precondition should be a SFINAE condition | Yes | 2 |
2054(i) | Resolved | 30.6 [time.point] | `time_point` constructors need to be `constexpr` | Yes |  |
2739(i) | C++17 | 30.6.6 [time.point.nonmember] | Issue with `time_point` non-member subtraction with an unsigned duration | Yes | 0 |
2057(i) | Resolved | 30.6.6 [time.point.nonmember] | `time_point + duration` semantics should be made `constexpr` conforming | Yes |  |
935(i) | NAD | 30.7 [time.clock] | clock error handling needs to be specified | Yes |  |
957(i) | C++11 | 30.7.2 [time.clock.system] | Various threading bugs #7 | Yes |  |
945(i) | NAD Editorial | 30.7.2 [time.clock.system] | `system_clock::rep` not specified | Yes |  |
3318(i) | C++20 | 30.7.2.1 [time.clock.system.overview] | Clarify whether clocks can represent time before their epoch | Yes | 0 |
4288(i) | New | 30.7.2.2 [time.clock.system.members] | The Constraints: element in [time.clock.system.members] is probably wrong | Yes | 3 |
3316(i) | C++20 | 30.7.3.1 [time.clock.utc.overview] | Correctly define epoch for `utc_clock` / `utc_timepoint` | Yes | 0 |
3145(i) | C++20 | 30.7.6 [time.clock.file] | `file_clock` breaks ABI for C++17 implementations | Yes | 1 |
1413(i) | NAD | 30.7.8 [time.clock.hires] | Specify whether `high_resolution_clock` is a distinct type or a typedef | Yes |  |
4257(i) | Tentatively Ready | 30.7.9 [time.clock.local] | Stream insertion for `chrono::local_time` should be constrained | Yes |  |
3260(i) | C++20 | 30.8 [time.cal] | `year_month*` arithmetic rejects durations convertible to years | Yes | 2 |
3209(i) | C++20 | 30.8.5.2 [time.cal.year.members] | Expression in `year::ok()` returns clause is ill-formed | Yes | 0 |
3273(i) | C++20 | 30.8.7.2 [time.cal.wdidx.members] | Specify `weekday_indexed` to range of `[0, 7]` | Yes | 0 |
3221(i) | C++20 | 30.8.13.3 [time.cal.ym.nonmembers] | Result of `year_month` arithmetic with `months` is ambiguous | Yes | 0 |
3206(i) | C++20 | 30.8.14.2 [time.cal.ymd.members] | `year_month_day` conversion to `sys_days` uses not-existing member function | Yes | 0 |
3231(i) | C++20 | 30.8.15.2 [time.cal.ymdlast.members] | `year_month_day_last::day` specification does not cover `!ok()` values | Yes | 0 |
3091(i) | Resolved | 30.9 [time.hms] | subsecond-precision `time_of_day` and durations that `seconds` cannot convert to | Yes | 2 |
4274(i) | Tentatively Ready | 30.9.2 [time.hms.members] | The `chrono::hh_mm_ss` constructor is ill-formed for unsigned durations | Yes |  |
3319(i) | C++20 | 30.11.1 [time.zone.general] | Properly reference specification of IANA time zone database | Yes | 0 |
4193(i) | New | 30.11.2 [time.zone.db] | §[time.zone.db] the specification uses the undefined term "thread-safe" | No | 3 |
4211(i) | New | 30.11.2.1 [time.zone.db.tzdb] | IANA time zone database allows links to refer to links | Yes | 2 |
3678(i) | New | 30.11.5.1 [time.zone.overview] | Constructors of `std::chrono::time_zone` might be overly unspecified | Yes | 4 |
3232(i) | C++20 | 30.11.7.1 [time.zone.zonedtime.overview] | Inconsistency in `zoned_time` deduction guides | Yes | 0 |
3294(i) | C++20 | 30.11.7.1 [time.zone.zonedtime.overview] | `zoned_time` deduction guides misinterprets `string`/`char*` | Yes | 0 |
4067(i) | New | 30.11.7.2 [time.zone.zonedtime.ctor] | Inconsistency and potential infinity meta-recursion in `std::chrono::zoned_time`'s constructors | Yes | 3 |
3224(i) | C++20 | 30.11.7.2 [time.zone.zonedtime.ctor] | `zoned_time` constructor from `TimeZonePtr` does not specify initialization of `tp_` | Yes | 0 |
3225(i) | C++20 | 30.11.7.2 [time.zone.zonedtime.ctor] | `zoned_time` converting constructor shall not be `noexcept` | Yes | 0 |
3226(i) | C++20 | 30.11.7.2 [time.zone.zonedtime.ctor] | `zoned_time` constructor from `string_view` should accept `zoned_time<Duration2, TimeZonePtr2>` | Yes | 2 |
4139(i) | New | 30.11.8 [time.zone.leap] | §[time.zone.leap] recursive constraint in `<=>` | No | 3 |
3359(i) | C++20 | 30.11.8 [time.zone.leap] | `<chrono>` leap second support should allow for negative leap seconds | Yes | 3 |
3383(i) | C++20 | 30.11.8.3 [time.zone.leap.nonmembers] | §[time.zone.leap.nonmembers] `sys_seconds` should be replaced with `seconds` | Yes | 1 |
3831(i) | New | 30.12 [time.format] | Two-digit formatting of negative `year` is ambiguous | Yes | 3 |
4022(i) | New | 30.12 [time.format] | Ambiguity in the formatting of negative years with format specifier `%C` | Yes | 3 |
4400(i) | New | 30.12 [time.format] | `enable_nonlocking_formatter_optimization` for durations with custom rep | Yes | 3 |
4118(i) | New | 30.12 [time.format] | How should `duration` formatters format custom `rep` types? | Yes | 3 |
3856(i) | New | 30.12 [time.format] | Unclear which conversion specifiers are valid for each chrono type | Yes | 3 |
3921(i) | New | 30.12 [time.format] | Is `std::chrono::duration<std::int64_t, std::ratio<INT64_MAX - 1, INT64_MAX>>{40}` required to be correctly formatted? | No | 3 |
3844(i) | Open | 30.12 [time.format] | Non-numeric formats for negative durations | Yes | 3 |
4124(i) | WP | 30.12 [time.format] | Cannot format `zoned_time` with resolution coarser than seconds | Yes |  |
3842(i) | C++23 | 30.12 [time.format] | Unclear wording for precision in chrono-format-spec | Yes |  |
3241(i) | C++20 | 30.12 [time.format] | `chrono-spec` grammar ambiguity in §[time.format] | Yes | 0 |
3262(i) | C++20 | 30.12 [time.format] | Formatting of negative durations is not specified | Yes | 2 |
3270(i) | C++20 | 30.12 [time.format] | Parsing and formatting `%j` with `duration`s | Yes | 2 |
3272(i) | C++20 | 30.12 [time.format] | `%I%p` should parse/format `duration` since midnight | Yes | 0 |
3332(i) | C++20 | 30.12 [time.format] | Issue in §[time.format] | Yes | 0 |
3565(i) | Resolved | 30.12 [time.format] | Handling of encodings in localized formatting of `chrono` types is underspecified | Yes | 2 |
3547(i) | Resolved | 30.12 [time.format] | Time formatters should not be locale sensitive by default | Yes | 2 |
3962(i) | New | 30.13 [time.parse] | What is the "decimal precision of the input"? | Yes | 3 |
3960(i) | New | 30.13 [time.parse] | How does `chrono::parse` handle duplicated data? | Yes | 3 |
3961(i) | New | 30.13 [time.parse] | Does `chrono::parse` check format strings? | Yes | 3 |
3956(i) | WP | 30.13 [time.parse] | `chrono::parse` uses `from_stream` as a customization point | Yes | 3 |
3554(i) | C++23 | 30.13 [time.parse] | `chrono::parse` needs `const charT*` and `basic_string_view<charT>` overloads | Yes | 2 |
3131(i) | C++20 | 30.13 [time.parse] | `addressof` all the things | Yes | 0 |
3218(i) | C++20 | 30.13 [time.parse] | Modifier for `%d` parse flag does not match POSIX and `format` specification | Yes | 0 |
3230(i) | C++20 | 30.13 [time.parse] | Format specifier `%y/%Y` is missing locale alternative versions | Yes | 0 |
3235(i) | C++20 | 30.13 [time.parse] | `parse` manipulator without abbreviation is not callable | Yes | 0 |
3245(i) | C++20 | 30.13 [time.parse] | Unnecessary restriction on `'%p'` parse specifier | Yes | 0 |
3252(i) | C++20 | 30.13 [time.parse] | Parse locale's aware modifiers for commands are not consistent with POSIX spec | Yes | 2 |
3269(i) | C++20 | 30.13 [time.parse] | Parse manipulators do not specify the result of the extraction from stream | Yes | 2 |
3271(i) | NAD | 30.13 [time.parse] | Parsing functions should save and restore stream format state | Yes | 3 |

## Section 31 (322 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
423(i) | Open | 31 [input.output] | Effects of negative `streamsize` in iostreams | Yes | 3 |
3130(i) | C++20 | 31 [input.output] | §[input.output] needs many `addressof` | Yes | 0 |
44(i) | CD1 | 31 [input.output] | Iostreams use operator== on int_type values | Yes |  |
273(i) | CD1 | 31 [input.output] | Missing ios_base qualification on members of a dependent class | Yes |  |
308(i) | CD1 | 31 [input.output] | Table 82 mentions unrelated headers | Yes |  |
365(i) | CD1 | 31 [input.output] | Lack of const-qualification in clause 27 | Yes |  |
55(i) | TC1 | 31 [input.output] | Invalid stream position is undefined | Yes |  |
366(i) | NAD | 31 [input.output] | Excessive const-qualification | Yes |  |
1141(i) | NAD Concepts | 31 [input.output] | Input/Output library not concept enabled | Yes |  |
623(i) | CD1 | 31.2.1 [iostream.limits.imbue] | `pubimbue` forbidden to call `imbue` | Yes |  |
3696(i) | New | 31.2.2 [stream.types] | "Basic integral types" should not be used | Yes | 3 |
369(i) | CD1 | 31.4 [iostream.objects] | io stream objects and static ctors | Yes |  |
455(i) | CD1 | 31.4 [iostream.objects] | cerr::tie() and wcerr::tie() are overspecified | Yes |  |
574(i) | CD1 | 31.4 [iostream.objects] | DR 369 Contradicts Text | Yes |  |
155(i) | TC1 | 31.4 [iostream.objects] | Typo in naming the class defining the class `Init` | Yes |  |
3910(i) | New | 31.4.2 [iostream.objects.overview] | The effects of including `<iostream>` on initialization are not yet precisely specified | Yes | 4 |
3878(i) | C++23 | 31.4.2 [iostream.objects.overview] | `import std;` should guarantee initialization of standard iostreams objects | Yes |  |
29(i) | TC1 | 31.4.3 [narrow.stream.objects] | Ios_base::init doesn't exist | Yes |  |
178(i) | NAD | 31.4.3 [narrow.stream.objects] | Should clog and cerr initially be tied to cout? | Yes |  |
2087(i) | C++14 | 31.5 [iostreams.base] | `iostream_category()` and `noexcept` | Yes |  |
1257(i) | C++11 | 31.5 [iostreams.base] | Header <ios> still contains a `concept_map` | Yes |  |
35(i) | TC1 | 31.5 [iostreams.base] | No manipulator unitbuf in synopsis | Yes |  |
2462(i) | C++17 | 31.5.2 [ios.base] | `std::ios_base::failure` is overspecified | Yes | 3 |
2143(i) | C++14 | 31.5.2 [ios.base] | `ios_base::xalloc` should be thread-safe | Yes |  |
41(i) | TC1 | 31.5.2 [ios.base] | Ios_base needs clear(), exceptions() | Yes |  | 157
50(i) | TC1 | 31.5.2 [ios.base] | Copy constructor and assignment operator of ios_base | Yes |  |
78(i) | TC1 | 31.5.2 [ios.base] | Typo: event_call_back | Yes |  |
331(i) | CD1 | 31.5.2.2.1 [ios.failure] | bad declaration of destructor for ios_base::failure | Yes |  |
363(i) | CD1 | 31.5.2.2.1 [ios.failure] | Missing exception specification in 27.4.2.1.1 | Yes |  |
48(i) | TC1 | 31.5.2.2.1 [ios.failure] | Use of non-existent exception constructor | Yes |  |
2765(i) | C++17 | 31.5.2.2.6 [ios.init] | Did LWG 1123 go too far? | Yes | 0 |
1123(i) | C++11 | 31.5.2.2.6 [ios.init] | No requirement that standard streams be flushed | Yes |  |
418(i) | NAD | 31.5.2.2.6 [ios.init] | exceptions thrown during iostream cleanup | Yes |  |
189(i) | TC1 | 31.5.2.3 [fmtflags.state] | setprecision() not specified correctly | Yes |  |
287(i) | NAD | 31.5.2.3 [fmtflags.state] | conflicting ios_base fmtflags | Yes |  |
47(i) | TC1 | 31.5.2.4 [ios.base.locales] | Imbue() and getloc() Returns clauses swapped | Yes |  |
156(i) | TC1 | 31.5.2.4 [ios.base.locales] | Typo in `imbue()` description | Yes |  |
49(i) | CD1 | 31.5.2.5 [ios.members.static] | Underspecification of ios_base::sync_with_stdio | Yes |  |
3675(i) | New | 31.5.2.6 [ios.base.storage] | `std::ios_base::iword/pword` might be misspecified | Yes | 4 |
3083(i) | C++20 | 31.5.2.6 [ios.base.storage] | What should `ios::iword(-1)` do? | Yes | 0 |
36(i) | TC1 | 31.5.2.6 [ios.base.storage] | Iword & pword storage lifetime omitted | Yes |  |
2600(i) | NAD | 31.5.2.6 [ios.base.storage] | `ios_base` must store inaccessible iostate flags | Yes |  |
157(i) | Dup | 31.5.2.6 [ios.base.storage] | Meaningless error handling for `pword()` and `iword()` | Yes |  | 41
2675(i) | New | 31.5.2.7 [ios.base.callback] | `register_callback` can fail | No | 3 |
4192(i) | New | 31.5.2.8 [ios.base.cons] | §[ios.base.cons] `ios_base` members may not have indeterminate values after construction | Yes | 3 |
3434(i) | C++23 | 31.5.2.8 [ios.base.cons] | `ios_base` never reclaims memory for `iarray` and `parray` | Yes |  |
220(i) | TC1 | 31.5.2.8 [ios.base.cons] | ~ios_base() usage valid? | Yes |  |
441(i) | CD1 | 31.5.3 [fpos] | Is fpos::state const? | Yes |  |
6(i) | NAD | 31.5.3 [fpos] | File position not an offset unimplementable | Yes |  |
332(i) | NAD | 31.5.3 [fpos] | Consider adding increment and decrement operators to std::fpos< T > | Yes |  |
573(i) | NAD | 31.5.3 [fpos] | C++0x file positioning should handle modern file sizes | Yes |  |
3118(i) | C++23 | 31.5.3.3 [fpos.operations] | `fpos` equality comparison unspecified | Yes | 4 |
52(i) | TC1 | 31.5.3.3 [fpos.operations] | Small I/O problems | Yes |  |
2808(i) | Resolved | 31.5.3.3 [fpos.operations] | Requirements for `fpos` and `stateT` | Yes | 4 |
2832(i) | Resolved | 31.5.3.3 [fpos.operations] | §[fpos.operations] strange requirement for `P(i)` | Yes | 3 |
1444(i) | Dup | 31.5.3.3 [fpos.operations] | `OFF_T` is not defined | Yes |  | 1414
194(i) | NAD | 31.5.4 [ios] | rdbuf() functions poorly specified | Yes |  |
2214(i) | Open | 31.5.4.2 [basic.ios.cons] | Clarify `basic_ios::init` call restrictions | Yes | 4 |
1249(i) | C++11 | 31.5.4.2 [basic.ios.cons] | `basic_ios` default ctor | Yes |  |
53(i) | TC1 | 31.5.4.2 [basic.ios.cons] | Basic_ios destructor unspecified | Yes |  |
145(i) | NAD | 31.5.4.2 [basic.ios.cons] | adjustfield lacks default value | Yes |  |
835(i) | C++11 | 31.5.4.3 [basic.ios.members] | Tying two streams together (correction to DR 581) | Yes |  |
1104(i) | C++11 | 31.5.4.3 [basic.ios.members] | `basic_ios::move` should accept lvalues | Yes |  |
1183(i) | C++11 | 31.5.4.3 [basic.ios.members] | `basic_ios::set_rdbuf` may break class invariants | Yes |  |
256(i) | CD1 | 31.5.4.3 [basic.ios.members] | typo in 27.4.4.2, p17: copy_event does not exist | Yes |  |
292(i) | CD1 | 31.5.4.3 [basic.ios.members] | effects of a.copyfmt (a) | Yes |  |
837(i) | NAD Editorial | 31.5.4.3 [basic.ios.members] | `basic_ios::copyfmt()` overly loosely specified | Yes |  |
1094(i) | C++11 | 31.5.4.4 [iostate.flags] | Replace "unspecified-bool-type" by "`explicit operator bool() const`" in I/O library | Yes |  |
272(i) | CD1 | 31.5.4.4 [iostate.flags] | Missing parentheses around subexpression | Yes |  | 569
412(i) | CD1 | 31.5.4.4 [iostate.flags] | Typo in 27.4.4.3 | Yes |  | 429
468(i) | CD1 | 31.5.4.4 [iostate.flags] | unexpected consequences of ios_base::operator void*() | Yes |  |
429(i) | Dup | 31.5.4.4 [iostate.flags] | typo in basic_ios::clear(iostate) | Yes |  | 412
569(i) | Dup | 31.5.4.4 [iostate.flags] | Postcondition for basic_ios::clear(iostate) incorrectly stated | Yes |  | 272
2504(i) | New | 31.6.3 [streambuf] | `basic_streambuf` is not an abstract class | No | 3 |
56(i) | TC1 | 31.6.3 [streambuf] | Showmanyc's return type | Yes |  |
122(i) | TC1 | 31.6.3 [streambuf] | streambuf/wstreambuf description should not say they are specializations | Yes |  |
255(i) | NAD | 31.6.3 [streambuf] | Why do `basic_streambuf<>::pbump()` and `gbump()` take an int? | Yes |  |
54(i) | TC1 | 31.6.3.2 [streambuf.cons] | Basic_streambuf's destructor | Yes |  |
421(i) | NAD | 31.6.3.2 [streambuf.cons] | is `basic_streambuf` copy-constructible? | Yes |  |
3658(i) | New | 31.6.3.3.5 [streambuf.pub.put] | `basic_streambuf::sputn` is both overspecified and underspecified | Yes | 3 |
4023(i) | WP | 31.6.3.4 [streambuf.protected] | Preconditions of `std::basic_streambuf::setg/setp` | Yes |  |
59(i) | TC1 | 31.6.3.4.2 [streambuf.get.area] | Ambiguity in specification of gbump | Yes |  |
364(i) | CD1 | 31.6.3.5.2 [streambuf.virt.buffer] | Inconsistent wording in 27.5.2.4.2 | Yes |  |
158(i) | TC1 | 31.6.3.5.2 [streambuf.virt.buffer] | Underspecified semantics for `setbuf()` | Yes |  |
159(i) | TC1 | 31.6.3.5.3 [streambuf.virt.get] | Strange use of `underflow()` | Yes |  |
32(i) | TC1 | 31.6.3.5.4 [streambuf.virt.pback] | Pbackfail description inconsistent | Yes |  |
565(i) | C++11 | 31.6.3.5.5 [streambuf.virt.put] | `xsputn` inefficient | Yes |  |
567(i) | CD1 | 31.7 [iostream.format] | streambuf inserter and extractor should be unformatted | Yes |  |
1445(i) | Resolved | 31.7 [iostream.format] | Several iostreams member functions incorrectly specified | Yes |  |
1447(i) | Resolved | 31.7 [iostream.format] | Request to resolve issue LWG 1328 | Yes |  |
309(i) | NAD | 31.7 [iostream.format] | Does sentry catch exceptions? | Yes |  |
1148(i) | NAD | 31.7 [iostream.format] | Wrong argument type of I/O stream manipulators `setprecision()` and `setw()` | Yes |  |
1446(i) | NAD | 31.7 [iostream.format] | Move and swap for I/O streams | Yes |  |
911(i) | C++11 | 31.7.5 [input.streams] | I/O streams and `move/swap` semantic | Yes |  |
160(i) | TC1 | 31.7.5.2 [istream] | Typo: Use of non-existing function `exception()` | Yes |  |
113(i) | NAD | 31.7.5.2 [istream] | Missing/extra iostream sync semantics | Yes |  |
2036(i) | NAD | 31.7.5.2 [istream] | `istream >> char` and `eofbit` | Yes |  |
419(i) | C++11 | 31.7.5.2.4 [istream.sentry] | istream extractors not setting `failbit` if `eofbit` is already set | Yes |  |
26(i) | TC1 | 31.7.5.2.4 [istream.sentry] | Bad sentry example | Yes |  |
195(i) | TC1 | 31.7.5.2.4 [istream.sentry] | Should `basic_istream::sentry`'s constructor ever set eofbit? | Yes |  |
1328(i) | Resolved | 31.7.5.2.4 [istream.sentry] | istream extractors not setting `failbit` if `eofbit` is already set | Yes |  |
203(i) | NAD | 31.7.5.2.4 [istream.sentry] | basic_istream::sentry::sentry() is uninstantiable with ctype<user-defined type> | Yes |  |
373(i) | CD1 | 31.7.5.3.1 [istream.formatted.reqmts] | Are basic_istream and basic_ostream to use (exceptions()&badbit) != 0 ? | Yes |  |
60(i) | TC1 | 31.7.5.3.1 [istream.formatted.reqmts] | What is a formatted input function? | Yes |  | 162, 163, 166
2349(i) | Resolved | 31.7.5.3.1 [istream.formatted.reqmts] | Clarify input/output function rethrow behavior | Yes | 3 |
696(i) | C++11 | 31.7.5.3.2 [istream.formatted.arithmetic] | `istream::operator>>(int&)` broken | Yes |  |
118(i) | CD1 | 31.7.5.3.2 [istream.formatted.arithmetic] | `basic_istream` uses nonexistent `num_get` member functions | Yes |  |
661(i) | CD1 | 31.7.5.3.2 [istream.formatted.arithmetic] | New 27.6.1.2.2 changes make special extractions useless | Yes |  |
161(i) | TC1 | 31.7.5.3.2 [istream.formatted.arithmetic] | Typo: `istream_iterator` vs. `istreambuf_iterator` | Yes |  |
413(i) | CD1 | 31.7.5.3.3 [istream.extractors] | Proposed resolution to LDR#64 still wrong | Yes |  |
13(i) | TC1 | 31.7.5.3.3 [istream.extractors] | Eos refuses to die | Yes |  |
64(i) | TC1 | 31.7.5.3.3 [istream.extractors] | Exception handling in `basic_istream::operator>>(basic_streambuf*)` | Yes |  |
68(i) | TC1 | 31.7.5.3.3 [istream.extractors] | Extractors for char* should store null at end | Yes |  |
2499(i) | Resolved | 31.7.5.3.3 [istream.extractors] | `operator>>(basic_istream&, CharT*)` makes it hard to avoid buffer overflows | Yes | 2 |
58(i) | NAD | 31.7.5.3.3 [istream.extractors] | Extracting a char from a wide-oriented stream | Yes |  |
639(i) | NAD | 31.7.5.3.3 [istream.extractors] | Still problems with exceptions during streambuf IO | Yes |  |
162(i) | Dup | 31.7.5.3.3 [istream.extractors] | Really "formatted input functions"? | Yes |  | 60
3464(i) | C++23 | 31.7.5.4 [istream.unformatted] | `istream::gcount()` can overflow | Yes | 0 |
2243(i) | C++20 | 31.7.5.4 [istream.unformatted] | `istream::putback` problem | Yes | 3 |
2244(i) | C++17 | 31.7.5.4 [istream.unformatted] | Issue on `basic_istream::seekg` | Yes | 3 |
2085(i) | C++14 | 31.7.5.4 [istream.unformatted] | Wrong description of effect 1 of `basic_istream::ignore` | Yes |  |
136(i) | CD1 | 31.7.5.4 [istream.unformatted] | seekp, seekg setting wrong streams? | Yes |  |
243(i) | CD1 | 31.7.5.4 [istream.unformatted] | `get` and `getline` when sentry reports failure | Yes |  |
370(i) | CD1 | 31.7.5.4 [istream.unformatted] | Minor error in basic_istream::get | Yes |  |
531(i) | CD1 | 31.7.5.4 [istream.unformatted] | array forms of unformatted input functions | Yes |  |
537(i) | CD1 | 31.7.5.4 [istream.unformatted] | Typos in the signatures in 27.6.1.3/42-43 and 27.6.2.4 | Yes |  |
566(i) | CD1 | 31.7.5.4 [istream.unformatted] | array forms of unformatted input function undefined for zero-element arrays | Yes |  |
61(i) | TC1 | 31.7.5.4 [istream.unformatted] | Ambiguity in iostreams exception policy | Yes |  |
62(i) | TC1 | 31.7.5.4 [istream.unformatted] | `Sync`'s return value | Yes |  |
129(i) | TC1 | 31.7.5.4 [istream.unformatted] | Need error indication from seekp() and seekg() | Yes |  |
172(i) | TC1 | 31.7.5.4 [istream.unformatted] | Inconsistent types for `basic_istream::ignore()` | Yes |  |
342(i) | NAD | 31.7.5.4 [istream.unformatted] | seek and eofbit | Yes |  |
399(i) | NAD | 31.7.5.4 [istream.unformatted] | volations of unformatted input function requirements | Yes |  |
2131(i) | NAD | 31.7.5.4 [istream.unformatted] | Member function getline taking a string as parameter | Yes |  |
163(i) | Dup | 31.7.5.4 [istream.unformatted] | Return of `gcount()` after a call to `gcount` | Yes |  | 60
415(i) | CD1 | 31.7.5.5 [istream.manip] | behavior of std::ws | Yes |  |
2328(i) | C++17 | 31.7.5.6 [istream.rvalue] | Rvalue stream extraction should use perfect forwarding | Yes | 3 |
2498(i) | Resolved | 31.7.5.6 [istream.rvalue] | `operator>>(basic_istream&&, T&&)` returns `basic_istream&`, but should probably return `basic_istream&&` | Yes | 3 |
271(i) | CD1 | 31.7.5.7 [iostreamclass] | basic_iostream missing typedefs | Yes |  |
135(i) | NAD | 31.7.5.7.2 [iostream.cons] | basic_iostream doubly initialized | Yes |  |
2221(i) | C++17 | 31.7.6 [output.streams] | No formatted output operator for `nullptr` | Yes | 3 |
2342(i) | New | 31.7.6.2 [ostream] | User conversion to `wchar_t const*` or to `wchar_t` not invoked for `operator<<` | Yes | 4 |
165(i) | CD1 | 31.7.6.2 [ostream] | `xsputn()`, `pubsync()` never called by `basic_ostream` members? | Yes |  |
311(i) | CD1 | 31.7.6.2 [ostream] | Incorrect wording in basic_ostream class synopsis | Yes |  |
2497(i) | New | 31.7.6.2.4 [ostream.sentry] | Use of `uncaught_exception()` | Yes | 3 |
4188(i) | WP | 31.7.6.2.4 [ostream.sentry] | `ostream::sentry` destructor should handle exceptions | Yes |  |
442(i) | CD1 | 31.7.6.2.4 [ostream.sentry] | sentry::operator bool() inconsistent signature | Yes |  |
397(i) | NAD Editorial | 31.7.6.2.4 [ostream.sentry] | `ostream::sentry` dtor throws exceptions | Yes |  |
398(i) | NAD | 31.7.6.2.4 [ostream.sentry] | effects of end-of-file on unformatted input functions | Yes |  |
2341(i) | C++14 | 31.7.6.2.5 [ostream.seeks] | Inconsistency between `basic_ostream::seekp(pos)` and `basic_ostream::seekp(off, dir)` | Yes | 0 |
3667(i) | NAD | 31.7.6.3 [ostream.formatted] | `std::cout << &X::f` prints `1` | Yes |  |
394(i) | NAD | 31.7.6.3.1 [ostream.formatted.reqmts] | behavior of formatted output on failure | Yes |  |
4101(i) | New | 31.7.6.3.2 [ostream.inserters.arithmetic] | LWG 117 loses the sign for negative NaN on some architectures | Yes | 3 |
117(i) | CD1 | 31.7.6.3.2 [ostream.inserters.arithmetic] | `basic_ostream` uses nonexistent `num_put` member functions | Yes |  |
640(i) | CD1 | 31.7.6.3.2 [ostream.inserters.arithmetic] | 27.6.2.5.2 does not handle `(unsigned) long long` | Yes |  |
437(i) | NAD | 31.7.6.3.2 [ostream.inserters.arithmetic] | Formatted output of function pointers is confusing | Yes |  |
166(i) | Dup | 31.7.6.3.3 [ostream.inserters] | Really "formatted output functions"? | Yes |  | 60
167(i) | CD1 | 31.7.6.3.4 [ostream.inserters.character] | Improper use of `traits_type::length()` | Yes |  |
474(i) | CD1 | 31.7.6.3.4 [ostream.inserters.character] | confusing Footnote 297 | Yes |  |
4039(i) | New | 31.7.6.3.5 [ostream.formatted.print] | §[ostream.formatted.print]: Inappropriate usage of `badbit` in definition of `vprint_unicode`/`vprint_nonunicode` | Yes | 4 |
4088(i) | WP | 31.7.6.3.5 [ostream.formatted.print] | `println` ignores the locale imbued in `std::ostream` | Yes |  |
581(i) | CD1 | 31.7.6.4 [ostream.unformatted] | `flush()` not unformatted function | Yes |  |
63(i) | TC1 | 31.7.6.4 [ostream.unformatted] | Exception-handling policy for unformatted output | Yes |  |
168(i) | TC1 | 31.7.6.4 [ostream.unformatted] | Typo: formatted vs. unformatted | Yes |  |
3501(i) | New | 31.7.6.5 [ostream.manip] | `basic_syncbuf`-related manipulators refer to some `Allocator` without defining it | Yes | 3 |
3571(i) | C++23 | 31.7.6.5 [ostream.manip] | `flush_emit` should set `badbit` if the `emit` call fails | Yes |  |
333(i) | CD1 | 31.7.6.5 [ostream.manip] | does endl imply synchronization with the device? | Yes |  |
1203(i) | C++20 | 31.7.6.6 [ostream.rvalue] | More useful rvalue stream insertion | Yes | 2 |
2534(i) | C++17 | 31.7.6.6 [ostream.rvalue] | Constrain rvalue stream operators | Yes | 3 |
4364(i) | New | 31.7.7 [std.manip] | SFINAE-friendliness on `operator<<` and `operator>>` for unspecified I/O manipulators | No | 4 |
3937(i) | New | 31.7.7 [std.manip] | I/O manipulators should be specified in terms of base classes | No | 3 |
183(i) | CD1 | 31.7.7 [std.manip] | I/O stream manipulators don't work for wide character streams | Yes |  |
216(i) | Dup | 31.7.7 [std.manip] | setbase manipulator description flawed | Yes |  | 193
2984(i) | New | 31.7.8 [ext.manip] | `put_money(99)` is unnecessarily undefined | Yes | 3 |
810(i) | C++11 | 31.7.8 [ext.manip] | Missing traits dependencies in operational semantics of extended manipulators | Yes |  |
1299(i) | C++11 | 31.7.8 [ext.manip] | Confusing typo in specification for `get_time` | Yes |  |
692(i) | CD1 | 31.7.8 [ext.manip] | `get_money` and `put_money` should be formatted I/O functions | Yes |  |
641(i) | NAD Editorial | 31.7.8 [ext.manip] | Editorial fix for 27.6.4 (N2134) | Yes |  |
2785(i) | C++17 | 31.7.9 [quoted.manip] | `quoted` should work with `basic_string_view` | Yes | 0 |
2272(i) | C++14 | 31.7.9 [quoted.manip] | `quoted` should use `char_traits::eq` for character comparison | Yes |  |
2344(i) | C++14 | 31.7.9 [quoted.manip] | `quoted()`'s interaction with padding is unclear | Yes | 1 |
4044(i) | WP | 31.7.10 [print.fun] | Confusing requirements for `std::print` on POSIX platforms | Yes | 3 |
4042(i) | Resolved | 31.7.10 [print.fun] | `std::print` should permit an efficient implementation | Yes | 3 |
3309(i) | New | 31.8 [string.streams] | Is `<ios>` implicitly `#include`d by `<sstream>`, `<fstream>` etc.? | No | 3 |
252(i) | CD1 | 31.8 [string.streams] | missing casts/C-style casts used in iostreams | Yes |  |
562(i) | CD1 | 31.8 [string.streams] | stringbuf ctor inefficient | Yes |  |
128(i) | NAD | 31.8 [string.streams] | Need open_mode() function for file stream, string streams, file buffers, and string buffers | Yes |  |
251(i) | CD1 | 31.8.2 [stringbuf] | basic_stringbuf missing allocator_type | Yes |  |
2995(i) | C++20 | 31.8.2.2 [stringbuf.cons] | `basic_stringbuf` default constructor forbids it from using SSO capacity | Yes | 3 |
238(i) | CD1 | 31.8.2.2 [stringbuf.cons] | Contradictory results of stringbuf initialization. | Yes |  |
3006(i) | Resolved | 31.8.2.2 [stringbuf.cons] | Constructing a `basic_stringbuf` from a `string` — where does the allocator come from? | Yes | 3 |
1251(i) | NAD | 31.8.2.2 [stringbuf.cons] | move constructing `basic_stringbuf` | Yes |  |
3992(i) | Tentatively NAD | 31.8.2.4 [stringbuf.members] | `basic_stringbuf::str()&&` should enforce 𝒪(1) | Yes | 4 |
1448(i) | C++11 | 31.8.2.4 [stringbuf.members] | Concerns about `basic_stringbuf::str(basic_string)` postconditions | Yes |  |
3097(i) | New | 31.8.2.5 [stringbuf.virtuals] | `basic_stringbuf seekoff` effects trigger undefined behavior and have contradictory returns | No | 3 |
2286(i) | Open | 31.8.2.5 [stringbuf.virtuals] | `stringbuf::underflow()` underspecified | Yes | 4 |
564(i) | C++11 | 31.8.2.5 [stringbuf.virtuals] | `stringbuf` seekpos underspecified | Yes |  |
375(i) | CD1 | 31.8.2.5 [stringbuf.virtuals] | basic_ios should be ios_base in 27.7.1.3 | Yes |  |
376(i) | CD1 | 31.8.2.5 [stringbuf.virtuals] | basic_streambuf semantics | Yes |  |
432(i) | CD1 | 31.8.2.5 [stringbuf.virtuals] | stringbuf::overflow() makes only one write position available | Yes |  |
453(i) | CD1 | 31.8.2.5 [stringbuf.virtuals] | basic_stringbuf::seekoff need not always fail for an empty stream | Yes |  |
563(i) | CD1 | 31.8.2.5 [stringbuf.virtuals] | stringbuf seeking from end | Yes |  |
169(i) | TC1 | 31.8.2.5 [stringbuf.virtuals] | Bad efficiency of `overflow()` mandated | Yes |  |
1449(i) | C++11 | 31.8.3 [istringstream] | Incomplete specification of header `<cinttypes>` | Yes |  |
2429(i) | NAD | 31.8.4 [ostringstream] | `std::basic_ostringstream` is missing an allocator-extended constructor | Yes |  |
45(i) | NAD | 31.8.4 [ostringstream] | Stringstreams read/write pointers initial position unclear | Yes |  |
170(i) | TC1 | 31.8.5 [stringstream] | Inconsistent definition of `traits_type` | Yes |  |
2121(i) | NAD | 31.8.5.2 [stringstream.cons] | `app` for string streams | Yes | 3 |
2676(i) | C++17 | 31.10 [file.streams] | Provide `filesystem::path` overloads for File-based streams | Yes | 2 |
420(i) | CD1 | 31.10 [file.streams] | is std::FILE a complete type? | Yes |  |
444(i) | CD1 | 31.10 [file.streams] | Bad use of casts in fstream | Yes |  |
460(i) | CD1 | 31.10 [file.streams] | Default modes missing from basic_fstream member specifications | Yes |  |
73(i) | NAD | 31.10 [file.streams] | `is_open` should be const | Yes |  |
863(i) | NAD | 31.10 [file.streams] | What is the state of a stream after close() succeeds | Yes |  |
105(i) | Dup | 31.10 [file.streams] | fstream ctors argument types desired | Yes |  | 454
3430(i) | C++23 | 31.10.1 [fstream.syn] | `std::fstream` & co. should be constructible from `string_view` | Yes | 3 |
643(i) | CD1 | 31.10.3 [filebuf] | Impossible "as if" clauses | Yes |  |
2943(i) | C++20 | 31.10.3.4 [filebuf.members] | Problematic specification of the wide version of `basic_filebuf::open` | Yes | 2 |
443(i) | CD1 | 31.10.3.4 [filebuf.members] | filebuf::close() inconsistent use of EOF | Yes |  |
596(i) | CD1 | 31.10.3.4 [filebuf.members] | 27.8.1.3 Table 112 omits "a+" and "a+b" modes | Yes |  |
454(i) | NAD | 31.10.3.4 [filebuf.members] | `basic_filebuf::open` should accept `wchar_t` names | Yes |  | 105
2473(i) | C++17 | 31.10.3.5 [filebuf.virtuals] | `basic_filebuf`'s relation to C `FILE` semantics | Yes | 2 |
171(i) | CD1 | 31.10.3.5 [filebuf.virtuals] | Strange `seekpos()` semantics due to joint position | Yes |  |
173(i) | TC1 | 31.10.3.5 [filebuf.virtuals] | Inconsistent types for `basic_filebuf::setbuf()` | Yes |  |
900(i) | C++11 | 31.10.4 [ifstream] | Stream move-assignment | Yes |  |
285(i) | CD1 | 31.10.4.2 [ifstream.cons] | minor editorial errors in fstream ctors | Yes |  |
409(i) | CD1 | 31.10.4.4 [ifstream.members] | Closing an fstream should clear error state | Yes |  |
22(i) | TC1 | 31.10.4.4 [ifstream.members] | Member open vs. flags | Yes |  |
592(i) | NAD Editorial | 31.10.4.4 [ifstream.members] | Incorrect treatment of rdbuf()->close() return type | Yes |  |
642(i) | NAD Editorial | 31.10.4.4 [ifstream.members] | Invalidated fstream footnotes in N2134 | Yes |  |
1150(i) | Resolved | 31.10.6 [fstream] | wchar_t, char16_t and char32_t filenames | Yes |  |
622(i) | CD1 | 31.10.6.4 [fstream.members] | behavior of `filebuf` dtor and `close` on error | Yes |  |
3498(i) | C++23 | 31.11.2.1 [syncstream.syncbuf.overview] | Inconsistent `noexcept`-specifiers for `basic_syncbuf` | Yes | 3 |
3253(i) | C++20 | 31.11.2.1 [syncstream.syncbuf.overview] | `basic_syncbuf::basic_syncbuf()` should not be explicit | Yes | 0 |
3399(i) | NAD | 31.11.2.1 [syncstream.syncbuf.overview] | `basic_syncbuf::emit()` + Qt's `#define emit` = Big Bada-Boom | Yes |  |
3496(i) | New | 31.11.2.4 [syncstream.syncbuf.members] | What does "uniquely associated" mean for `basic_syncbuf::emit()`? | No | 3 |
3497(i) | New | 31.11.2.4 [syncstream.syncbuf.members] | Postconditions for `basic_syncbuf::emit()` | No | 3 |
3616(i) | C++23 | 31.11.2.6 [syncstream.syncbuf.special] | LWG 3498 seems to miss the non-member `swap` for `basic_syncbuf` | Yes |  |
3334(i) | C++20 | 31.11.3 [syncstream.osyncstream] | `basic_osyncstream` move assignment and destruction calls `basic_syncbuf::emit()` twice | Yes | 3 |
3867(i) | C++23 | 31.11.3.1 [syncstream.osyncstream.overview] | Should `std::basic_osyncstream`'s move assignment operator be `noexcept`? | Yes |  |
3127(i) | C++20 | 31.11.3.1 [syncstream.osyncstream.overview] | `basic_osyncstream::rdbuf` needs a `const_cast` | Yes | 0 |
3570(i) | C++23 | 31.11.3.3 [syncstream.osyncstream.members] | `basic_osyncstream::emit` should be an unformatted output function | Yes |  |
2680(i) | C++17 | 31.12 [filesystems] | Add "Equivalent to" to filesystem | Yes | 2 |
2666(i) | NAD Editorial | 31.12 [filesystems] | Bitmask operations should use bitmask terms | Yes | 3 |
3657(i) | C++23 | 31.12.6 [fs.class.path] | `std::hash<std::filesystem::path>` is not enabled | Yes |  |
2707(i) | C++17 | 31.12.6 [fs.class.path] | `path` construction and assignment should have "`string_type&&`" overloads | Yes | 0 |
2798(i) | Resolved | 31.12.6 [fs.class.path] | Definition of path in terms of a string | Yes | 2 |
2668(i) | NAD | 31.12.6 [fs.class.path] | `path::operator+=` is defined, but not `operator+` | Yes | 3 |
3244(i) | C++20 | 31.12.6.4 [fs.path.req] | Constraints for `Source` in §[fs.path.req] insufficiently constrainty | Yes | 0 |
2711(i) | C++17 | 31.12.6.5.1 [fs.path.construct] | `path` is convertible from approximately everything under the sun | Yes | 1 |
2664(i) | C++17 | 31.12.6.5.3 [fs.path.append] | `operator/` (and other append) semantics not useful if argument has root | Yes | 2 |
2732(i) | C++17 | 31.12.6.5.3 [fs.path.append] | Questionable specification of `path::operator/=` and `path::append` | Yes | 2 |
3055(i) | C++20 | 31.12.6.5.4 [fs.path.concat] | `path::operator+=(single-character)` misspecified | Yes | 3 |
2734(i) | Resolved | 31.12.6.5.4 [fs.path.concat] | Questionable specification in [fs.path.concat] | Yes | 2 |
2665(i) | Resolved | 31.12.6.5.5 [fs.path.modifiers] | `remove_filename()` post condition is incorrect | Yes | 1 |
2966(i) | C++20 | 31.12.6.5.6 [fs.path.native.obs] | Incomplete resolution of US 74 | Yes |  |
2936(i) | C++20 | 31.12.6.5.8 [fs.path.compare] | Path comparison is defined in terms of the generic format | Yes | 2 |
3098(i) | New | 31.12.6.5.9 [fs.path.decompose] | Misleading example for `filesystem::path::filename()` | Yes | 3 |
2667(i) | C++17 | 31.12.6.5.9 [fs.path.decompose] | `path::root_directory()` description is confusing | Yes | 0 |
3699(i) | New | 31.12.6.5.11 [fs.path.gen] | `lexically_relative` on UNC drive paths (`\\?\C:\...`) results in a default-constructed value | No | 3 |
3070(i) | C++20 | 31.12.6.5.11 [fs.path.gen] | `path::lexically_relative` causes surprising results if a filename can also be a root-name | Yes | 2 |
3096(i) | C++20 | 31.12.6.5.11 [fs.path.gen] | `path::lexically_relative` is confused by trailing slashes | Yes | 2 |
3794(i) | New | 31.12.6.6 [fs.path.itr] | `std::filesystem::path::iterator::reference` should be allowed to be `std::filesystem::path` | Yes | 3 |
2674(i) | C++17 | 31.12.6.6 [fs.path.itr] | Bidirectional iterator requirement on `path::iterator` is very expensive | Yes | 2 |
2989(i) | C++20 | 31.12.6.7 [fs.path.io] | `path`'s stream insertion operator lets you insert everything under the sun | Yes | 2 |
3065(i) | C++20 | 31.12.6.8 [fs.path.nonmember] | LWG 2989 missed that all `path`'s other operators should be hidden friends as well | Yes | 2 |
4070(i) | Open | 31.12.6.9.2 [fs.path.fmtr.funcs] | Transcoding by `std::formatter<std::filesystem::path>` | Yes | 2 |
2965(i) | C++20 | 31.12.7.2 [fs.filesystem.error.members] | Non-existing `path::native_string()` in `filesystem_error::what()` specification | Yes | 0 |
3043(i) | C++20 | 31.12.7.2 [fs.filesystem.error.members] | Bogus postcondition for `filesystem_error` constructor | Yes | 0 |
2947(i) | New | 31.12.8.1 [fs.enum.path.format] | Clarify several filesystem terms | No | 3 |
2851(i) | C++20 | 31.12.8.2 [fs.enum.file.type] | `std::filesystem` enum classes are now underspecified | Yes | 2 |
2678(i) | C++17 | 31.12.8.2 [fs.enum.file.type] | `std::filesystem` enum classes overspecified | Yes | 3 |
2787(i) | C++17 | 31.12.9 [fs.class.file.status] | §[fs.file_status.cons] doesn't match class definition | Yes | 0 |
3078(i) | New | 31.12.10 [fs.class.directory.entry] | `directory_entry`, `directory_iterator` and `recursive_directory_iterator` perform needless path copies | No | 3 |
3171(i) | C++23 | 31.12.10 [fs.class.directory.entry] | LWG 2989 breaks `directory_entry` stream insertion | Yes | 2 |
2677(i) | Resolved | 31.12.10.4 [fs.dir.entry.obs] | `directory_entry::status` is not allowed to be cached as a quality-of-implementation issue | Yes | 2 |
2761(i) | NAD | 31.12.10.4 [fs.dir.entry.obs] | `directory_entry` comparisons are members | Yes | 2 |
3480(i) | C++23 | 31.12.11 [fs.class.directory.iterator] | `directory_iterator` and `recursive_directory_iterator` are not C++20 ranges | Yes | 3 |
2723(i) | C++17 | 31.12.11 [fs.class.directory.iterator] | Do `directory_iterator` and `recursive_directory_iterator` become the end iterator upon error? | Yes | 0 |
3719(i) | C++23 | 31.12.11.1 [fs.class.directory.iterator.general] | Directory iterators should be usable with default sentinel | Yes |  |
3668(i) | New | 31.12.11.2 [fs.dir.itr.members] | `[recursive_]directory_iterator` constructors refer to undefined `options` | Yes | 3 |
3013(i) | C++20 | 31.12.11.2 [fs.dir.itr.members] | `(recursive_)directory_iterator` construction and traversal should not be `noexcept` | Yes | 0 |
2726(i) | C++17 | 31.12.11.2 [fs.dir.itr.members] | `[recursive_]directory_iterator::increment(error_code&)` is underspecified | Yes | 0 |
2840(i) | Resolved | 31.12.11.2 [fs.dir.itr.members] | `directory_iterator::increment` is seemingly narrow-contract but marked `noexcept` | Yes | 2 |
2706(i) | C++17 | 31.12.12 [fs.class.rec.dir.itr] | Error reporting for `recursive_directory_iterator::pop()` is under-specified | Yes | 0 |
2708(i) | Open | 31.12.12.2 [fs.rec.dir.itr.members] | `recursive_directory_iterator::recursion_pending()` is incorrectly specified | Yes | 2 |
3067(i) | C++20 | 31.12.12.2 [fs.rec.dir.itr.members] | `recursive_directory_iterator::pop` must invalidate | Yes | 0 |
2669(i) | C++17 | 31.12.12.2 [fs.rec.dir.itr.members] | `recursive_directory_iterator` effects refers to non-existent functions | Yes | 0 |
2704(i) | C++17 | 31.12.12.2 [fs.rec.dir.itr.members] | `recursive_directory_iterator`'s members should require '`*this` is dereferenceable' | Yes | 1 |
4279(i) | New | 31.12.13.2 [fs.op.absolute] | §[fs.op.absolute] Non-normative encouragement should be Recommended practice | No | 4 |
2956(i) | C++17 | 31.12.13.3 [fs.op.canonical] | `filesystem::canonical()` still defined in terms of `absolute(p, base)` | Yes | 1 |
3057(i) | Open | 31.12.13.4 [fs.op.copy] | Correct `copy_options` handling | Yes | 2 |
2682(i) | C++20 | 31.12.13.4 [fs.op.copy] | `filesystem::copy()` won't create a symlink to a directory | Yes | 2 |
3015(i) | C++20 | 31.12.13.4 [fs.op.copy] | `copy_options::unspecified` underspecified | Yes | 3 |
2671(i) | C++17 | 31.12.13.4 [fs.op.copy] | Errors in Copy | Yes | 0 |
2681(i) | C++17 | 31.12.13.4 [fs.op.copy] | `filesystem::copy()` cannot copy symlinks | Yes | 2 |
2683(i) | C++17 | 31.12.13.4 [fs.op.copy] | `filesystem::copy()` says "no effects" | Yes | 3 |
3056(i) | New | 31.12.13.5 [fs.op.copy.file] | `copy_file()` copies which attributes? | Yes | 3 |
2849(i) | C++20 | 31.12.13.5 [fs.op.copy.file] | Why does `!is_regular_file(from)` cause `copy_file` to report a "file already exists" error? | Yes | 2 |
3014(i) | C++20 | 31.12.13.5 [fs.op.copy.file] | More `noexcept` issues with filesystem operations | Yes |  |
2712(i) | C++17 | 31.12.13.5 [fs.op.copy.file] | `copy_file(from, to, ...)` has a number of unspecified error conditions | Yes | 2 |
3744(i) | New | 31.12.13.6 [fs.op.copy.symlink] | `copy_symlink(junction, new_symlink)`'s behavior is unclear | No | 3 |
2935(i) | C++20 | 31.12.13.7 [fs.op.create.directories] | What should `create_directories` do when `p` already exists but is not a directory? | Yes | 0 |
3079(i) | C++20 | 31.12.13.8 [fs.op.create.directory] | LWG 2935 forgot to fix the `existing_p` overloads of `create_directory` | Yes | 0 |
2937(i) | C++20 | 31.12.13.13 [fs.op.equivalent] | Is `equivalent("existing_thing", "not_existing_thing")` an error? | Yes | 0 |
2722(i) | C++17 | 31.12.13.13 [fs.op.equivalent] | `equivalent` incorrectly specifies throws clause | Yes | 3 |
2725(i) | C++17 | 31.12.13.14 [fs.op.exists] | `filesystem::exists(const path&, error_code&)` error reporting | Yes | 1 |
2663(i) | Resolved | 31.12.13.15 [fs.op.file.size] | Enable efficient retrieval of file size from `directory_entry` | Yes | 2 |
2672(i) | C++17 | 31.12.13.20 [fs.op.is.empty] | Should is_empty use error_code in its specification? | Yes | 3 |
2719(i) | C++17 | 31.12.13.27 [fs.op.permissions] | `permissions` function should not be `noexcept` due to narrow contract | Yes | 0 |
2720(i) | C++17 | 31.12.13.27 [fs.op.permissions] | `permissions` function incorrectly specified for symlinks | Yes | 2 |
2721(i) | C++17 | 31.12.13.32 [fs.op.remove.all] | `remove_all` has incorrect post conditions | Yes | 3 |
2816(i) | C++20 | 31.12.13.34 [fs.op.resize.file] | `resize_file` has impossible postcondition | Yes | 3 |
2728(i) | C++17 | 31.12.13.36 [fs.op.status] | `status(p).permissions()` and `symlink_status(p).permissions()` are not specified | Yes | 0 |
2673(i) | C++17 | 31.12.13.36 [fs.op.status] | `status()` effects cannot be implemented as specified | Yes | 0 |
3822(i) | C++23 | 31.12.13.40 [fs.op.weakly.canonical] | Avoiding normalization in `filesystem::weakly_canonical` | Yes |  |
3026(i) | C++20 | 31.12.13.40 [fs.op.weakly.canonical] | `filesystem::weakly_canonical` still defined in terms of `canonical(p, base)` | Yes | 0 |
984(i) | C++11 | 31.13 [c.files] | Does `<cinttypes>` have macro guards? | Yes |  |
2548(i) | Resolved | 31.13 [c.files] | Missing `vfscanf` from `<cstdio>` | Yes | 3 |
2249(i) | Resolved | 31.13 [c.files] | [CD] Remove `gets` from `<cstdio>` | Yes |  |
2043(i) | NAD | 31.13 [c.files] | `std{in,out,err}` should be usable as field names | Yes |  |
3834(i) | C++23 | 31.13.2 [cinttypes.syn] | Missing `constexpr` for `std::intmax_t` math functions in `<cinttypes>` | Yes |  |

## Section 32 (286 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
1089(i) | C++11 | 32 [thread] | Unify "Throws: Nothing." specifications | Yes |  |
1442(i) | NAD Editorial | 32 [thread] | "happens-before" should be "synchronizes-with" | Yes |  | 1443
1443(i) | Dup | 32 [thread] | Imposed happens-before edges are not made transitive | Yes |  | 1442
1139(i) | NAD Concepts | 32 [thread] | Thread support library not concept enabled | Yes |  |
1481(i) | Resolved | 32.2 [thread.req] | Missing Lockable requirements | Yes |  |
1108(i) | C++11 | 32.2.2 [thread.req.exception] | thread.req.exception overly constrains implementations | Yes |  |
2379(i) | NAD | 32.2.3 [thread.req.native] | Obtaining native handle of the current thread | Yes |  |
2941(i) | C++20 | 32.2.4 [thread.req.timing] | §[thread.req.timing] wording should apply to both member and namespace-level functions | Yes | 0 |
1158(i) | C++11 | 32.2.4 [thread.req.timing] | Encouragement to use monotonic clock | Yes |  |
1482(i) | Resolved | 32.2.4 [thread.req.timing] | Timeout operations are under-specified | Yes |  |
2819(i) | New | 32.2.5 [thread.req.lockable] | Unspecified Return type: elements | Yes | 3 |
3499(i) | New | 32.2.5.4 [thread.req.lockable.timed] | Timed lockable and mutex requirements are imprecise about `duration` and `time_point` | No | 3 |
3924(i) | New | 32.3.1 [thread.stoptoken.intro] | Stop token data race avoidance requirements unclear | Yes | 3 |
3254(i) | C++20 | 32.3.4 [stoptoken] | Strike `stop_token`'s `operator!=` | Yes | 0 |
3362(i) | C++20 | 32.3.5 [stopsource] | Strike `stop_source`'s `operator!=` | Yes | 0 |
4362(i) | Tentatively NAD | 32.3.8 [stoptoken.inplace] | Inconsistent usage of `constexpr` for `inplace_stop_token` and `inplace_stop_source` | Yes |  |
1483(i) | NAD Editorial | 32.4 [thread.threads] | `__STDCPP_THREADS spelling` | Yes |  |
1484(i) | LEWG | 32.4.3 [thread.thread.class] | Need a way to join a thread with a timeout | No | 4 |
3516(i) | New | 32.4.3.2 [thread.thread.id] | `thread::id` spaceship may be inconsistent with equality | Yes | 3 |
1277(i) | C++11 | 32.4.3.2 [thread.thread.id] | `std::thread::id` should be trivially copyable | Yes |  |
783(i) | CD1 | 32.4.3.2 [thread.thread.id] | `thread::id` reuse | Yes |  |
889(i) | Resolved | 32.4.3.2 [thread.thread.id] | `thread::id` comparisons | Yes |  |
1485(i) | NAD | 32.4.3.2 [thread.thread.id] | Unclear `thread::id` specification | Yes |  |
3475(i) | New | 32.4.3.3 [thread.thread.constr] | `std::thread`'s constructor needs to be able to report general memory allocation failures | Yes | 3 |
4310(i) | Core | 32.4.3.3 [thread.thread.constr] | Is "the completion of the invocation of the constructor" considered as an expression? | No | 4 |
3476(i) | C++23 | 32.4.3.3 [thread.thread.constr] | `thread` and `jthread` constructors require that the parameters be move-constructible but never move construct the parameters | Yes | 0 |
3039(i) | C++20 | 32.4.3.3 [thread.thread.constr] | Unnecessary `decay` in `thread` and `packaged_task` | Yes | 0 |
891(i) | C++11 | 32.4.3.3 [thread.thread.constr] | `std::thread`, `std::call_once` issue | Yes |  |
929(i) | C++11 | 32.4.3.3 [thread.thread.constr] | Thread constructor | Yes |  |
967(i) | C++11 | 32.4.3.3 [thread.thread.constr] | Various threading bugs #17 | Yes |  |
1176(i) | NAD | 32.4.3.3 [thread.thread.constr] | Make `thread` constructor non-variadic | Yes |  |
963(i) | C++11 | 32.4.3.6 [thread.thread.member] | Various threading bugs #13 | Yes |  |
1033(i) | C++11 | 32.4.3.6 [thread.thread.member] | `thread::join()` effects? | Yes |  |
3788(i) | C++23 | 32.4.4.2 [thread.jthread.cons] | `jthread::operator=(jthread&&)` postconditions are unimplementable under self-assignment | Yes | 3 |
888(i) | C++11 | 32.4.5 [thread.thread.this] | `this_thread::yield` too strong | Yes |  |
1487(i) | C++11 | 32.4.5 [thread.thread.this] | Clock related operations exception specifications conflict | Yes |  |
1486(i) | NAD | 32.4.5 [thread.thread.this] | Value of `this_thread::get_id()` underspecified for detached thread | Yes |  |
3633(i) | New | 32.5 [atomics] | Atomics are copy constructible and copy assignable from `volatile` atomics | Yes | 3 |
880(i) | Resolved | 32.5 [atomics] | Missing atomic exchange parameter | Yes |  | 942
923(i) | Resolved | 32.5 [atomics] | atomics with floating-point | Yes |  |
924(i) | Resolved | 32.5 [atomics] | structs with internal padding | Yes |  |
1143(i) | Resolved | 32.5 [atomics] | Atomic operations library not concept enabled | Yes |  |
1145(i) | Resolved | 32.5 [atomics] | Inappropriate headers for atomics | Yes |  |
1455(i) | Resolved | 32.5 [atomics] | C language compatibility for atomics | Yes |  | 1454
1523(i) | Resolved | 32.5 [atomics] | `noexcept` for Clause 29 | Yes |  |
879(i) | NAD Editorial | 32.5 [atomics] | Atomic load const qualification | Yes |  |
937(i) | NAD Editorial | 32.5 [atomics] | Atomics for standard typedef types | Yes |  |
1456(i) | NAD | 32.5 [atomics] | Missing fixed-size `atomic_` typedefs | Yes |  |
1461(i) | NAD | 32.5 [atomics] | Rename all `ATOMIC_*` macros as `STD_ATOMIC_*` | Yes |  |
942(i) | Dup | 32.5 [atomics] | Atomics synopsis typo | Yes |  | 880
1454(i) | Dup | 32.5 [atomics] | Ensure C compatibility for atomics | Yes |  | 1455
3220(i) | New | 32.5.2 [atomics.syn] | P0558 broke conforming C++14 uses of atomic `shared_ptr` | Yes | 3 |
2236(i) | SG1 | 32.5.2 [atomics.syn] | `kill_dependency` unconditionally noexcept | No | 4 |
3745(i) | C++23 | 32.5.2 [atomics.syn] | `std::atomic_wait` and its friends lack `noexcept` | Yes |  |
2988(i) | C++20 | 32.5.2 [atomics.syn] | Clause 32 cleanup missed one `typename` | Yes | 0 |
1457(i) | Resolved | 32.5.2 [atomics.syn] | Splitting lock-free properties | Yes |  |
2037(i) | Resolved | 32.5.2 [atomics.syn] | `atomic` free functions incorrectly specified | Yes |  |
4309(i) | Tentatively NAD | 32.5.4 [atomics.order] | How are two `seq_cst` operations ordered in the single total order if these two operations are unsequenced? | No |  |
3980(i) | Tentatively NAD | 32.5.4 [atomics.order] | The read exclusive ownership of an atomic read-modify-write operation and whether its read and write are two operations are unclear | Yes |  |
3999(i) | New | 32.5.4 [atomics.order] | P0439R0 changed the value category of memory order constants | Yes | 4 |
3268(i) | New | 32.5.4 [atomics.order] | `memory_order::memory_order_foo` broken in C++20 | Yes | 4 |
3941(i) | Open | 32.5.4 [atomics.order] | §[atomics.order] inadvertently prohibits widespread implementation techniques | No | 3 |
2265(i) | Open | 32.5.4 [atomics.order] | 29.3p9 appears to rule out some acceptable executions | No | 4 |
1459(i) | LEWG | 32.5.4 [atomics.order] | Overlapping evaluations are allowed | No | 4 | 1458
4174(i) | SG1 | 32.5.4 [atomics.order] | How does [atomics.order] p3 apply when then modification is an initialization? | No | 3 |
4177(i) | SG1 | 32.5.4 [atomics.order] | §[atomics.order] p8 "circularly depend on their own computation" is unclear for loop | No | 4 |
4004(i) | SG1 | 32.5.4 [atomics.order] | The load and store operation in §[atomics.order] p1 is ambiguous | No | 3 |
2130(i) | C++14 | 32.5.4 [atomics.order] | Missing ordering constraints | Yes |  |
818(i) | CD1 | 32.5.4 [atomics.order] | wording for memory ordering | Yes |  |
2034(i) | Resolved | 32.5.4 [atomics.order] | Initialization of atomics is misspecified so that it doesn't preserve sequential consistency | Yes |  |
926(i) | NAD Editorial | 32.5.4 [atomics.order] | Sequentially consistent fences, relaxed operations and modification order | Yes |  |
1458(i) | Dup | 32.5.4 [atomics.order] | Overlapping evaluations are allowed | Yes |  | 1459
3249(i) | C++23 | 32.5.5 [atomics.lockfree] | There are no 'pointers' in §[atomics.lockfree] | Yes | 4 |
1146(i) | Resolved | 32.5.5 [atomics.lockfree] | "lockfree" does not say enough | Yes |  |
1460(i) | Resolved | 32.5.5 [atomics.lockfree] | Missing lock-free property for type `bool` should be added | Yes |  |
3263(i) | New | 32.5.6 [atomics.wait] | Atomic waiting function calls should only be unblocked once | Yes | 3 |
3288(i) | New | 32.5.6 [atomics.wait] | `atomic<T>::notify_one` is unimplementable | Yes | 2 |
3160(i) | C++20 | 32.5.7 [atomics.ref.generic] | `atomic_ref() = delete;` should be deleted | Yes | 0 |
3485(i) | NAD | 32.5.7 [atomics.ref.generic] | `atomic_ref` safety should be based on operations that "potentially conflict" rather than lifetime | Yes | 3 |
3508(i) | Resolved | 32.5.7.1 [atomics.ref.generic.general] | `atomic_ref<cv T>` is not well-specified | Yes | 2 |
4377(i) | Tentatively Ready | 32.5.7.2 [atomics.ref.ops] | Misleading note about lock-free property of `std::atomic_ref` | Yes |  |
4244(i) | Tentatively NAD | 32.5.7.2 [atomics.ref.ops] | Whether the spuriously failed comparison applies to `compare_exchange_strong` is unclear | No |  |
3409(i) | New | 32.5.7.2 [atomics.ref.ops] | Too lax description of `atomic_ref<T>::required_alignment` | Yes | 3 |
3012(i) | C++20 | 32.5.8 [atomics.types.generic] | `atomic<T>` is unimplementable for non-`is_trivially_copy_constructible T` | Yes | 2 |
2441(i) | C++17 | 32.5.8 [atomics.types.generic] | Exact-width atomic typedefs should be provided | Yes | 0 |
768(i) | CD1 | 32.5.8 [atomics.types.generic] | Typos in [atomics]? | Yes |  |
845(i) | CD1 | 32.5.8 [atomics.types.generic] | atomics cannot support aggregate initialization | Yes |  |
4069(i) | Resolved | 32.5.8 [atomics.types.generic] | `std::atomic<volatile T>` should be ill-formed | Yes | 2 |
908(i) | Resolved | 32.5.8 [atomics.types.generic] | Deleted assignment operators for atomic types must be volatile | Yes |  |
2715(i) | Resolved | 32.5.8 [atomics.types.generic] | What is 'aggregate initialization syntax'? | Yes | 3 |
2424(i) | Resolved | 32.5.8 [atomics.types.generic] | 29.5 should state that atomic types are not trivially copyable | Yes | 2 |
944(i) | Resolved | 32.5.8 [atomics.types.generic] | `atomic<bool>` derive from `atomic_bool`? | Yes |  |
1469(i) | Resolved | 32.5.8 [atomics.types.generic] | `atomic<T*>` inheritance from `atomic_address` breaks type safety | Yes |  |
2024(i) | Resolved | 32.5.8 [atomics.types.generic] | Inconsistent implementation requirements for `atomic<integral>` and `atomic<T*>` | Yes |  |
2165(i) | Resolved | 32.5.8 [atomics.types.generic] | `std::atomic<X>` requires `X` to be nothrow default constructible | Yes | 4 |
3949(i) | WP | 32.5.8.1 [atomics.types.generic.general] | `std::atomic<bool>`'s trivial destructor dropped in C++17 spec wording | Yes |  |
4321(i) | Tentatively NAD | 32.5.8.2 [atomics.types.operations] | How are evaluations occurring within a store and a load operation ordered where the store synchronized with the load | No |  |
3417(i) | SG1 | 32.5.8.2 [atomics.types.operations] | Missing `volatile` atomic deprecations | Yes | 3 |
4169(i) | WP | 32.5.8.2 [atomics.types.operations] | `std::atomic<T>`'s default constructor should be constrained | Yes |  |
2426(i) | C++17 | 32.5.8.2 [atomics.types.operations] | Issue about `compare_exchange` | Yes | 1 |
1474(i) | C++11 | 32.5.8.2 [atomics.types.operations] | weak compare-and-exchange confusion | Yes |  | 1470, 1475, 1476, 1477
1478(i) | C++11 | 32.5.8.2 [atomics.types.operations] | Clarify race conditions in atomics initialization | Yes |  |
777(i) | CD1 | 32.5.8.2 [atomics.types.operations] | Atomics Library Issue | Yes |  |
846(i) | CD1 | 32.5.8.2 [atomics.types.operations] | No definition for constructor | Yes |  |
2334(i) | Resolved | 32.5.8.2 [atomics.types.operations] | `atomic`'s default constructor requires "uninitialized" state even for types with non-trivial default-constructor | Yes |  |
1043(i) | Resolved | 32.5.8.2 [atomics.types.operations] | Clarify that `compare_exchange` is not a read-modify-write operation | Yes |  |
1147(i) | Resolved | 32.5.8.2 [atomics.types.operations] | Non-volatile atomic functions | Yes |  |
864(i) | NAD Editorial | 32.5.8.2 [atomics.types.operations] | Defect in atomic wording | Yes |  |
1471(i) | NAD Editorial | 32.5.8.2 [atomics.types.operations] | Default constructor of atomics needs specification | Yes |  |
1472(i) | NAD Editorial | 32.5.8.2 [atomics.types.operations] | Incorrect semantics of `atomic_init` | Yes |  |
3611(i) | NAD | 32.5.8.2 [atomics.types.operations] | Should `compare_exchange` be allowed to modify the `expected` value on success? | Yes | 2 |
1473(i) | NAD | 32.5.8.2 [atomics.types.operations] | Incomplete memory order specifications | Yes |  |
1470(i) | Dup | 32.5.8.2 [atomics.types.operations] | "Same-ness" curiosities | Yes |  | 1474
1475(i) | Dup | 32.5.8.2 [atomics.types.operations] | weak compare-and-exchange confusion II | Yes |  | 1474
1476(i) | Dup | 32.5.8.2 [atomics.types.operations] | Meaningless specification of spurious failure | Yes |  | 1474
1477(i) | Dup | 32.5.8.2 [atomics.types.operations] | weak compare-and-exchange confusion III | Yes |  | 1474
3047(i) | New | 32.5.8.3 [atomics.types.int] | `atomic` compound assignment operators can cause undefined behavior when corresponding `fetch_meow` members don't | Yes | 3 |
3045(i) | C++20 | 32.5.8.4 [atomics.types.float] | `atomic<floating-point>` doesn't have `value_type` or `difference_type` | Yes | 0 |
4194(i) | Tentatively NAD | 32.5.8.5 [atomics.types.pointer] | `atomic<void*>` should use generic class template | Yes |  |
3906(i) | New | 32.5.8.5 [atomics.types.pointer] | "Undefined address" is undefined | No | 3 |
3893(i) | WP | 32.5.8.7.2 [util.smartptr.atomic.shared] | LWG 3661 broke `atomic<shared_ptr<T>> a; a = nullptr;` | Yes |  |
3661(i) | C++23 | 32.5.8.7.2 [util.smartptr.atomic.shared] | `constinit atomic<shared_ptr<T>> a(nullptr);` should work | Yes |  |
3418(i) | New | 32.5.9 [atomics.nonmembers] | Deprecated free functions in `<atomic>` | Yes | 3 |
3659(i) | C++23 | 32.5.10 [atomics.flag] | Consider `ATOMIC_FLAG_INIT` undeprecation | Yes | 3 |
2138(i) | C++14 | 32.5.10 [atomics.flag] | `atomic_flag::clear` should not accept `memory_order_consume` | Yes |  |
2159(i) | C++14 | 32.5.10 [atomics.flag] | `atomic_flag` initialization | Yes |  |
1479(i) | C++11 | 32.5.11 [atomics.fences] | Fence functions should be `extern "C"` | Yes |  |
1480(i) | C++11 | 32.5.11 [atomics.fences] | Atomic fences don't have synchronizes with relation | Yes |  |
3671(i) | C++23 | 32.5.12 [stdatomic.h.syn] | `atomic_fetch_xor` missing from `stdatomic.h` | Yes |  |
1488(i) | LEWG | 32.6 [thread.mutex] | Improve interoperability between the C++0x and C1x threads APIs | No | 4 |
1044(i) | C++11 | 32.6 [thread.mutex] | Empty tag types should be `constexpr` literals | Yes |  |
1268(i) | Resolved | 32.6 [thread.mutex] | The Mutex requirements in 30.4.1 and 30.4.2 are wrong | Yes |  |
1489(i) | NAD Editorial | 32.6 [thread.mutex] | `unlock` functions and unlock mutex requirements are inconsistent | Yes |  |
936(i) | LEWG | 32.6.4 [thread.mutex.requirements] | Mutex type overspecified | No | 4 | 961
961(i) | LEWG | 32.6.4 [thread.mutex.requirements] | Various threading bugs #11 | No | 4 | 936
1493(i) | LEWG | 32.6.4 [thread.mutex.requirements] | Add `mutex`, `recursive_mutex`, `is_locked` function | No | 4 |
2126(i) | Pending NAD Editorial | 32.6.4 [thread.mutex.requirements] | Several specification problems in regard to mutex requirements | Yes |  |
960(i) | C++11 | 32.6.4 [thread.mutex.requirements] | Various threading bugs #10 | Yes |  |
968(i) | C++11 | 32.6.4 [thread.mutex.requirements] | Various threading bugs #18 | Yes |  |
1218(i) | C++11 | 32.6.4 [thread.mutex.requirements] | mutex destructor synchronization | Yes |  |
1490(i) | Resolved | 32.6.4 [thread.mutex.requirements] | Mutex requirements too stringent | Yes |  |
1491(i) | Resolved | 32.6.4 [thread.mutex.requirements] | `try_lock` does not guarantee forward progress | Yes |  |
1492(i) | Resolved | 32.6.4 [thread.mutex.requirements] | Mutex requirements should not be bound to threads | Yes |  |
980(i) | NAD | 32.6.4 [thread.mutex.requirements] | `mutex lock()` missing error conditions | Yes |  |
2134(i) | Pending NAD Editorial | 32.6.4.2 [thread.mutex.requirements.mutex] | Redundant Mutex requirement? | Yes |  |
2309(i) | C++17 | 32.6.4.2 [thread.mutex.requirements.mutex] | `mutex::lock()` should not throw `device_or_resource_busy` | Yes | 0 |
2090(i) | NAD | 32.6.4.2 [thread.mutex.requirements.mutex] | Minor Overconstraint in Mutex Types | Yes |  |
893(i) | C++11 | 32.6.4.2.2 [thread.mutex.class] | `std::mutex` issue | Yes |  | 905
828(i) | Resolved | 32.6.4.2.2 [thread.mutex.class] | Static initialization for `std::mutex`? | Yes |  |
905(i) | Dup | 32.6.4.2.2 [thread.mutex.class] | Mutex specification questions | Yes |  | 893
2125(i) | Pending NAD Editorial | 32.6.4.3 [thread.timedmutex.requirements] | `TimedMutex` specification problem | Yes |  |
2091(i) | C++14 | 32.6.4.3 [thread.timedmutex.requirements] | Misplaced effect in `m.try_lock_for()` | Yes |  |
2288(i) | C++14 | 32.6.4.4 [thread.sharedmutex.requirements] | Inconsistent requirements for shared mutexes | Yes |  |
2363(i) | Resolved | 32.6.4.5.2 [thread.sharedtimedmutex.class] | Defect in 30.4.1.4.1 [thread.sharedtimedmutex.class] | Yes | 2 |
2731(i) | C++23 | 32.6.5.2 [thread.lock.guard] | Existence of `lock_guard<MutexTypes...>::mutex_type` typedef unclear | Yes | 3 |
2887(i) | Resolved | 32.6.5.2 [thread.lock.guard] | Revert the changes from P0156R0: variadic `lock_guard` | Yes |  |
2023(i) | Resolved | 32.6.5.2 [thread.lock.guard] | Incorrect requirements for `lock_guard` and `unique_lock` | Yes |  |
2104(i) | C++14 | 32.6.5.4 [thread.lock.unique] | `unique_lock` move-assignment should not be `noexcept` | Yes |  |
4172(i) | WP | 32.6.5.4.2 [thread.lock.unique.cons] | unique_lock self-move-assignment is broken | Yes |  |
2577(i) | C++17 | 32.6.5.4.2 [thread.lock.unique.cons] | `{shared,unique}_lock` should use `std::addressof` | Yes | 0 |
1045(i) | C++11 | 32.6.5.4.2 [thread.lock.unique.cons] | Remove unnecessary preconditions from `unique_lock` constructor | Yes |  |
962(i) | C++11 | 32.6.5.4.3 [thread.lock.unique.locking] | Various threading bugs #12 | Yes |  |
1159(i) | C++11 | 32.6.5.4.3 [thread.lock.unique.locking] | Unclear spec for `resource_deadlock_would_occur` | Yes |  | 1219
1219(i) | Dup | 32.6.5.4.3 [thread.lock.unique.locking] | unique_lock::lock and resource_deadlock_would_occur | Yes |  | 1159
784(i) | NAD | 32.6.5.4.4 [thread.lock.unique.mod] | unique_lock::release | Yes |  |
3030(i) | C++20 | 32.6.6 [thread.lock.algorithm] | Who shall meet the requirements of `try_lock`? | Yes | 0 |
986(i) | C++11 | 32.6.6 [thread.lock.algorithm] | Generic `try_lock` contradiction | Yes |  |
2080(i) | C++14 | 32.6.7 [thread.once] | Specify when `once_flag` becomes invalid | Yes |  |
2442(i) | C++17 | 32.6.7.2 [thread.once.callonce] | `call_once()` shouldn't `DECAY_COPY()` | Yes |  |
1494(i) | C++11 | 32.6.7.2 [thread.once.callonce] | Term "are serialized" not defined | Yes |  |
2140(i) | C++14 | 32.7 [thread.condition] | Meaning of `notify_all_at_thread_exit` synchronization requirement? | Yes |  |
2190(i) | C++14 | 32.7 [thread.condition] | Condition variable specification | Yes |  |
859(i) | C++11 | 32.7 [thread.condition] | Monotonic Clock is Conditionally Supported? | Yes |  |
1220(i) | C++11 | 32.7 [thread.condition] | What does `condition_variable` wait on? | Yes |  |
1222(i) | C++11 | 32.7 [thread.condition] | condition_variable incorrect effects for exception safety | Yes |  |
1497(i) | C++11 | 32.7 [thread.condition] | `lock()` postcondition can not be generally achieved | Yes |  |
1498(i) | Resolved | 32.7 [thread.condition] | Unclear specification for [thread.condition] | Yes |  |
1495(i) | NAD Editorial | 32.7 [thread.condition] | Condition variable `wait_for` return value insufficient | Yes |  |
1499(i) | NAD | 32.7 [thread.condition] | Condition variables preclude wakeup optimization | Yes |  |
3343(i) | Open | 32.7.3 [thread.condition.nonmember] | Ordering of calls to `unlock()` and `notify_all()` in Effects element of `notify_all_at_thread_exit()` should be reversed | Yes | 3 |
4301(i) | Tentatively Ready | 32.7.4 [thread.condition.condvar] | `condition_variable{_any}::wait_{for, until}` should take timeout by value | Yes |  |
3504(i) | New | 32.7.4 [thread.condition.condvar] | `condition_variable::wait_for` is overspecified | Yes | 3 |
2093(i) | C++14 | 32.7.4 [thread.condition.condvar] | Throws clause of `condition_variable::wait` with predicate | Yes |  |
2135(i) | C++14 | 32.7.4 [thread.condition.condvar] | Unclear requirement for exceptions thrown in `condition_variable::wait()` | Yes |  |
857(i) | C++11 | 32.7.4 [thread.condition.condvar] | `condition_variable::time_wait` return `bool` error prone | Yes |  |
965(i) | C++11 | 32.7.4 [thread.condition.condvar] | Various threading bugs #15 | Yes |  |
1221(i) | C++11 | 32.7.4 [thread.condition.condvar] | `condition_variable` wording | Yes |  |
958(i) | Resolved | 32.7.4 [thread.condition.condvar] | Various threading bugs #8 | Yes |  |
966(i) | Resolved | 32.7.4 [thread.condition.condvar] | Various threading bugs #16 | Yes |  |
2240(i) | Resolved | 32.7.4 [thread.condition.condvar] | Probable misuse of term "function scope" in [thread.condition] | Yes |  |
1496(i) | NAD Editorial | 32.7.4 [thread.condition.condvar] | `condition_variable` not implementable | Yes |  |
887(i) | NAD | 32.7.4 [thread.condition.condvar] | issue with condition::wait_... | Yes |  |
959(i) | NAD | 32.7.4 [thread.condition.condvar] | Various threading bugs #9 | Yes |  |
3425(i) | C++23 | 32.7.5 [thread.condition.condvarany] | `condition_variable_any` fails to constrain its `Lock` parameters | Yes | 0 |
2092(i) | C++14 | 32.7.5 [thread.condition.condvarany] | Vague Wording for `condition_variable_any` | Yes |  |
1267(i) | C++11 | 32.7.5 [thread.condition.condvarany] | Incorrect wording for `condition_variable_any::wait_for` | Yes |  |
964(i) | Resolved | 32.7.5 [thread.condition.condvarany] | Various threading bugs #14 | Yes |  |
1500(i) | NAD Editorial | 32.7.5 [thread.condition.condvarany] | Consider removal of `native_handle()` | Yes |  |
1223(i) | NAD | 32.7.5 [thread.condition.condvarany] | condition_variable_any lock matching? | Yes |  |
1224(i) | NAD | 32.7.5 [thread.condition.condvarany] | condition_variable_any support for recursive mutexes? | Yes |  |
3898(i) | New | 32.9.3.3 [thread.barrier.class] | Possibly unintended preconditions for completion functions of `std::barrier` | Yes | 3 |
2276(i) | C++17 | 32.10 [futures] | Missing requirement on `std::promise::set_exception` | Yes |  |
1518(i) | C++11 | 32.10 [futures] | Waiting for deferred functions | Yes |  |
1046(i) | Resolved | 32.10 [futures] | Provide simple facility to start asynchronous operations | Yes |  |
1244(i) | Resolved | 32.10 [futures] | `wait_*()` in `*future` for synchronous functions | Yes |  |
1275(i) | Resolved | 32.10 [futures] | Creating and setting futures | Yes |  |
1501(i) | Resolved | 32.10 [futures] | Specification for managing associated asynchronous state has problems | Yes |  |
1513(i) | Resolved | 32.10 [futures] | 'launch' enum too restrictive | Yes |  |
2056(i) | C++14 | 32.10.1 [futures.overview] | `future_errc` enums start with value 0 (invalid value for `broken_promise`) | Yes |  |
2102(i) | C++14 | 32.10.1 [futures.overview] | Why is `std::launch` an implementation-defined type? | Yes |  |
1226(i) | Resolved | 32.10.3 [futures.errors] | Incomplete changes of #890 | Yes |  |
1160(i) | Resolved | 32.10.4 [futures.future.error] | `future_error` public constructor is 'exposition only' | Yes |  |
2530(i) | Open | 32.10.5 [futures.state] | Clarify observable side effects of releasing a shared state | No | 3 |
1269(i) | Resolved | 32.10.5 [futures.state] | Associated state doesn't account for `async` | Yes |  |
1502(i) | Resolved | 32.10.5 [futures.state] | Specification of [futures.state] unclear | Yes |  |
1503(i) | NAD Editorial | 32.10.5 [futures.state] | "associated asynchronous state" must go | Yes |  |
2532(i) | Open | 32.10.6 [futures.promise] | Satisfying a `promise` at thread exit | Yes | 3 |
3466(i) | C++23 | 32.10.6 [futures.promise] | Specify the requirements for `promise`/`future`/`shared_future` consistently | Yes | 3 |
2412(i) | C++20 | 32.10.6 [futures.promise] | `promise::set_value()` and `promise::get_future()` should not race | Yes | 3 |
2523(i) | C++17 | 32.10.6 [futures.promise] | `std::promise` synopsis shows two `set_value_at_thread_exit()`'s for no apparent reason | Yes | 0 |
2098(i) | C++14 | 32.10.6 [futures.promise] | Minor Inconsistency between `promise::set_value` and `promise::set_value_at_thread_exit` | Yes |  |
2095(i) | Resolved | 32.10.6 [futures.promise] | `promise` and `packaged_task` missing constructors needed for uses-allocator construction | Yes | 4 |
3003(i) | Resolved | 32.10.6 [futures.promise] | `<future>` still has type-erased allocators in `promise` | Yes | 2 |
1049(i) | Resolved | 32.10.6 [futures.promise] | Move assignment of `promise` inverted | Yes |  |
1050(i) | Resolved | 32.10.6 [futures.promise] | Clarify postconditions for `get_future()` | Yes |  |
1088(i) | Resolved | 32.10.6 [futures.promise] | `std::promise` should provide non-member `swap` overload | Yes |  |
1165(i) | Resolved | 32.10.6 [futures.promise] | Unneeded `promise` move constructor | Yes |  |
1272(i) | Resolved | 32.10.6 [futures.promise] | confusing declarations of `promise::set_value` | Yes |  |
1291(i) | Resolved | 32.10.6 [futures.promise] | Exceptions thrown during `promise::set_value` | Yes |  |
1300(i) | Resolved | 32.10.6 [futures.promise] | Circular definition of `promise::swap` | Yes |  |
1504(i) | Resolved | 32.10.6 [futures.promise] | Term "are serialized" is not defined | Yes |  |
1505(i) | Resolved | 32.10.6 [futures.promise] | Synchronization between `promise::set_value` and `future::get` | Yes |  |
1507(i) | Resolved | 32.10.6 [futures.promise] | `promise::XXX_at_thread_exit` functions have no synchronization requirements | Yes |  |
1506(i) | NAD Editorial | 32.10.6 [futures.promise] | `set_exception` with a null pointer | Yes |  |
1164(i) | NAD | 32.10.6 [futures.promise] | `promise::swap` should pass by rvalue reference | Yes |  |
3795(i) | C++23 | 32.10.7 [futures.unique.future] | Self-move-assignment of `std::future` and `std::shared_future` have unimplementable postconditions | Yes | 3 |
2531(i) | C++17 | 32.10.7 [futures.unique.future] | `future::get` should explicitly state that the shared state is released | Yes | 3 |
2556(i) | C++17 | 32.10.7 [futures.unique.future] | Wide contract for `future::share()` | Yes | 3 |
2096(i) | C++14 | 32.10.7 [futures.unique.future] | Incorrect constraints of `future::get` in regard to `MoveAssignable` | Yes |  |
2185(i) | C++14 | 32.10.7 [futures.unique.future] | Missing throws clause for `future/shared_future::wait_for/wait_until` | Yes |  |
2031(i) | C++11 | 32.10.7 [futures.unique.future] | `std::future<>::share()` only applies to rvalues | Yes |  |
1047(i) | Resolved | 32.10.7 [futures.unique.future] | Ensure that future's `get()` blocks when not ready | Yes |  |
1048(i) | Resolved | 32.10.7 [futures.unique.future] | Provide empty-state inspection for `std::unique_future` | Yes |  |
1161(i) | Resolved | 32.10.7 [futures.unique.future] | Unnecessary `unique_future` limitations | Yes |  |
1273(i) | Resolved | 32.10.7 [futures.unique.future] | `future::valid` should be callable on an invalid future | Yes |  |
3458(i) | Resolved | 32.10.7 [futures.unique.future] | Is `shared_future` intended to work with arrays or function types? | Yes | 0 |
1106(i) | Resolved | 32.10.8 [futures.shared.future] | Multiple exceptions from connected `shared_future::get()`? | Yes |  |
1162(i) | Resolved | 32.10.8 [futures.shared.future] | `shared_future` should support an efficient move constructor | Yes |  |
1163(i) | Resolved | 32.10.8 [futures.shared.future] | `shared_future` is inconsistent with `shared_ptr` | Yes |  |
1266(i) | Resolved | 32.10.8 [futures.shared.future] | `shared_future::get` and deferred `async` functions | Yes |  |
1304(i) | Resolved | 32.10.8 [futures.shared.future] | Missing preconditions for `shared_future` | Yes |  |
2799(i) | Resolved | 32.10.8 [futures.shared.future] | `noexcept`-specifications in `shared_future` | Yes | 2 |
2920(i) | Resolved | 32.10.8 [futures.shared.future] | Add a deduction guide for creating a `shared_future` from a `future` rvalue | Yes |  |
1107(i) | NAD Editorial | 32.10.8 [futures.shared.future] | constructor `shared_future(unique_future)` by value? | Yes |  |
2046(i) | NAD | 32.10.8 [futures.shared.future] | `shared_future(future<R>&&)` should be allowed to throw | Yes |  |
3582(i) | New | 32.10.9 [futures.async] | Unclear where `std::async` exceptions are handled | Yes | 3 |
2202(i) | Deferred | 32.10.9 [futures.async] | Missing allocator support by `async` | No | 4 |
2752(i) | C++17 | 32.10.9 [futures.async] | "Throws:" clauses of `async` and `packaged_task` are unimplementable | Yes | 3 |
2186(i) | C++14 | 32.10.9 [futures.async] | Incomplete action on `async/launch::deferred` | Yes |  |
2078(i) | C++14 | 32.10.9 [futures.async] | Throw specification of `async()` incomplete | Yes |  |
2100(i) | C++14 | 32.10.9 [futures.async] | timed waiting functions cannot timeout if `launch::async` policy used | Yes |  |
2120(i) | C++14 | 32.10.9 [futures.async] | What should `async` do if neither '`async`' nor '`deferred`' is set in policy? | Yes |  |
2032(i) | C++11 | 32.10.9 [futures.async] | Incorrect synchronization clause of `async` function | Yes |  |
2856(i) | Resolved | 32.10.9 [futures.async] | `std::async` should be marked as `[[nodiscard]]` | Yes | 2 |
1315(i) | NAD Editorial | 32.10.9 [futures.async] | return type of `async` | Yes |  |
1512(i) | NAD Editorial | 32.10.9 [futures.async] | Conflict in specification: block or join? | Yes |  |
3117(i) | C++23 | 32.10.10 [futures.task] | Missing `packaged_task` deduction guides | Yes | 3 |
2976(i) | C++20 | 32.10.10 [futures.task] | Dangling `uses_allocator` specialization for `packaged_task` | Yes | 3 |
2921(i) | C++17 | 32.10.10 [futures.task] | `packaged_task` and type-erased allocators | Yes |  |
2067(i) | C++14 | 32.10.10 [futures.task] | `packaged_task` should have deleted copy c'tor with const parameter | Yes |  |
2030(i) | C++11 | 32.10.10 [futures.task] | `packaged_task::result_type` should be removed | Yes |  |
1090(i) | Resolved | 32.10.10 [futures.task] | Missing description of `packaged_task` member `swap`, missing non-member `swap` | Yes |  |
1508(i) | Resolved | 32.10.10 [futures.task] | Rename `packaged_task::operator bool()` | Yes |  |
4160(i) | New | 32.10.10.1 [futures.task.general] | `packaged_task` should reject rvalue reference return types | Yes | 3 |
4158(i) | New | 32.10.10.2 [futures.task.members] | `packaged_task::operator=` should abandon its shared state | Yes | 3 |
4154(i) | WP | 32.10.10.2 [futures.task.members] | The Mandates for `std::packaged_task`'s constructor from a callable entity should consider decaying | Yes | 3 |
2407(i) | C++17 | 32.10.10.2 [futures.task.members] | `packaged_task(allocator_arg_t, const Allocator&, F&&)` should neither be constrained nor `explicit` | Yes |  |
2097(i) | C++14 | 32.10.10.2 [futures.task.members] | `packaged_task` constructors should be constrained | Yes |  |
2142(i) | C++14 | 32.10.10.2 [futures.task.members] | `packaged_task::operator()` synchronization too broad? | Yes |  |
1514(i) | C++11 | 32.10.10.2 [futures.task.members] | `packaged_task` constructors need review | Yes |  |
2008(i) | C++11 | 32.10.10.2 [futures.task.members] | Conflicting Error Conditions for `packaged_task::operator()` | Yes |  |
2027(i) | C++11 | 32.10.10.2 [futures.task.members] | Initialization of the stored task of a `packaged_task` | Yes |  |
2245(i) | Resolved | 32.10.10.2 [futures.task.members] | `packaged_task::reset()` memory allocation | Yes | 3 |
1515(i) | Resolved | 32.10.10.2 [futures.task.members] | `packaged_task::make_ready_at_thread_exit` has no synchronization requirements | Yes |  |
2025(i) | Resolved | 32.10.10.2 [futures.task.members] | Incorrect semantics of move assignment operator of `packaged_task` | Yes |  |
2000(i) | C++11 | 32.10.10.3 [futures.task.nonmembers] | Missing definition of `packaged_task` specialization of `uses_allocator` | Yes |  |

## Section 33 (60 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
4353(i) | New | 33 [exec] | Uses of `MANDATE-NOTHROW` in CPOs should not enclose CPO argument sub-expressions | No | 3 |
4260(i) | New | 33.2.1 [exec.queryable.general] | Query objects must be default constructible | Yes | 2 |
4326(i) | New | 33.5.1 [exec.fwd.env] | Standard defined queries can't customize `forwarding_query_t` by inheriting from it | Yes | 4 |
4175(i) | WP | 33.5.2 [exec.get.allocator] | `get_env()` specified in terms of `as_const()` but this doesn't work with rvalue senders | Yes |  |
4354(i) | SG1 | 33.5.8 [exec.get.fwd.progress] | Reconsider `weakly_parallel` as the default `forward_progress_guarantee` | Yes | 1 |
4328(i) | Tentatively Ready | 33.6 [exec.sched] | Remove note in §[exec.sched] regarding waiting for completion of scheduled operations | Yes |  |
4327(i) | New | 33.6 [exec.sched] | Equal schedulers should be required to have same behaviour | No | 3 |
4143(i) | New | 33.7.2 [exec.set.value] | `execution::set_value/set_error/set_stopped/start` should always return `void` | Yes | 2 |
4200(i) | WP | 33.8.1 [exec.opstate.general] | The `operation_state` concept can be simplified | Yes |  |
4213(i) | New | 33.9 [exec.snd] | Sender spec depends on unspecified order of evaluation | No | 2 |
4199(i) | New | 33.9.1 [exec.snd.general] | constraints on user customizations of standard sender algorithms are incorrectly specified | No | 1 |
4278(i) | New | 33.9.2 [exec.snd.expos] | Consider changing how `get-domain-early(sndr)` works | No |  |
4248(i) | New | 33.9.2 [exec.snd.expos] | Late domain-based dispatching of `schedule_from` and `continues_on` are flipped | Yes | 1 |
4190(i) | New | 33.9.2 [exec.snd.expos] | Specification of completion-signatures-for in [exec.snd.expos]/p39 is recursive | Yes | 2 |
4202(i) | WP | 33.9.3 [exec.snd.concepts] | `enable-sender` should be a variable template | Yes | 1 |
4201(i) | WP | 33.9.4 [exec.awaitable] | `with-await-transform::await_transform` should not use a deduced return type | Yes |  |
4368(i) | New | 33.9.5 [exec.domain.default] | Potential dangling reference returned from `transform_sender` | Yes | 1 |
4209(i) | WP | 33.9.5 [exec.domain.default] | `default_domain::transform_env` should be returning `FWD-ENV(env)` | Yes |  |
4363(i) | Tentatively NAD | 33.9.6 [exec.snd.transform] | `transform_sender` comparing types ignoring cv-qualifiers doesn't take into account differences in value category | Yes |  |
4355(i) | New | 33.9.10 [exec.connect] | `connect-awaitable()` should mandate `rcvr` can receive all completion-signals rather than using constraints | Yes | 2 |
4356(i) | New | 33.9.10 [exec.connect] | `connect()` should use `get_allocator(get_env(rcvr))` to allocate the coroutine-state for a `connect-awaitable` coroutine | Yes | 2 |
4357(i) | New | 33.9.10 [exec.connect] | `connect-awaitable` should use `is_void_v` to check for result-type of `co_await` expression instead of `same_as<void>` | Yes | 4 |
4208(i) | WP | 33.9.10 [exec.connect] | Wording needs to ensure that in `connect(sndr, rcvr)` that `rcvr` expression is only evaluated once | Yes |  |
4395(i) | New | 33.9.12.3 [exec.write.env] | `write_env` implementation-detail lambda should have explicit return type | No | 2 |
4198(i) | WP | 33.9.12.7 [exec.schedule.from] | `schedule_from` isn't starting the schedule sender if decay-copying results throws | Yes | 1 |
4203(i) | WP | 33.9.12.7 [exec.schedule.from] | Constraints on `get-state` functions are incorrect | Yes | 1 |
4369(i) | New | 33.9.12.9 [exec.then] | `check-types` function for `upon_error` and `upon_stopped` is wrong | Yes | 2 |
4419(i) | New | 33.9.12.10 [exec.let] | `let_value/error/stopped` should specify the attributes of their senders | No | 1 |
4204(i) | WP | 33.9.12.10 [exec.let] | specification of `as-sndr2(Sig)` in [exec.let] is incomplete | Yes | 1 |
4205(i) | WP | 33.9.12.10 [exec.let] | `let_[*].transform_env` is specified in terms of the `let_*` sender itself instead of its child | Yes | 1 |
4227(i) | WP | 33.9.12.12 [exec.when.all] | Missing `noexcept` operator in [exec.when.all] | Yes |  |
4215(i) | New | 33.12.1 [exec.run.loop] | `run_loop::finish` should be `noexcept` | Yes | 2 |
4150(i) | Resolved | 33.12.1.4 [exec.run.loop.members] | The preconditions on `run_loop::run()` are too strict | Yes |  |
4358(i) | New | 33.13.1 [exec.as.awaitable] | §[exec.as.awaitable] is using "Preconditions:" when it should probably be described in the constraint | Yes | 2 |
4360(i) | New | 33.13.1 [exec.as.awaitable] | `awaitable-sender` concept should qualify use of `awaitable-receiver` type | Yes | 2 |
4359(i) | New | 33.13.1 [exec.as.awaitable] | `as_awaitable(expr, p)` does not define semantics of call if `p` is not an lvalue | Yes |  |
4133(i) | New | 33.13.1 [exec.as.awaitable] | `awaitable-receiver`'s members are potentially throwing | No | 1 |
4361(i) | LEWG | 33.13.1 [exec.as.awaitable] | `awaitable-receiver::set_value` should use Mandates instead of constraints | Yes | 1 |
4344(i) | New | 33.13.3 [exec.affine.on] | `affine_on` has no specification for the default | Yes | 2 |
4329(i) | LEWG | 33.13.3 [exec.affine.on] | Customising affine_on for other algorithms | No | 3 |
4330(i) | LEWG | 33.13.3 [exec.affine.on] | `affine_on` semantics | No | 2 |
4331(i) | LEWG | 33.13.3 [exec.affine.on] | `affine_on` shape may be wrong | No | 2 |
4332(i) | LEWG | 33.13.3 [exec.affine.on] | `affine_on` shouldn't forward the stop token to the scheduling operation | No | 2 |
4342(i) | Tentatively Ready | 33.13.5 [exec.task.scheduler] | Missing rvalue reference qualification for `task_scheduler::ts-sender::connect()` | Yes |  |
4336(i) | LEWG | 33.13.5 [exec.task.scheduler] | `bulk` vs. `task_scheduler` | No | 2 |
4339(i) | New | 33.13.6 [exec.task] | `task`'s coroutine frame may be released late | Yes | 2 |
4341(i) | Tentatively Ready | 33.13.6.2 [task.class] | Missing rvalue reference qualification for `task::connect()` | Yes |  |
4343(i) | Tentatively Ready | 33.13.6.2 [task.class] | Missing default template arguments for `task` | Yes |  |
4338(i) | LEWG | 33.13.6.2 [task.class] | sender unaware coroutines should be able to `co_await` a `task` | No | 2 |
4348(i) | LEWG | 33.13.6.2 [task.class] | `task` doesn't support symmetric transfer | No | 2 |
4340(i) | Tentatively Ready | 33.13.6.5 [task.promise] | `task::promise_type::unhandled_stopped()` should be `noexcept` | Yes |  |
4345(i) | Tentatively Ready | 33.13.6.5 [task.promise] | `task::promise_type::return_value` default template parameter | Yes |  |
4346(i) | Tentatively Ready | 33.13.6.5 [task.promise] | `task::promise_type::return_void`/`value` lack a specification | Yes |  |
4349(i) | Tentatively Ready | 33.13.6.5 [task.promise] | `task` is not actually started lazily | Yes |  |
4415(i) | Tentatively Ready | 33.13.6.5 [task.promise] | `task::promise_type::uncaught_exception` seems to be misnamed | Yes |  |
4337(i) | Tentatively NAD | 33.13.6.5 [task.promise] | `co_await change_coroutine_scheduler(s)` requires assignable | Yes |  |
4347(i) | New | 33.13.6.5 [task.promise] | `task`'s stop source is always created | No | 2 |
4335(i) | LEWG | 33.13.6.5 [task.promise] | `task` shadows the environment's allocator | No | 2 |
4333(i) | LEWG | 33.13.6.5 [task.promise] | `task` uses unusual allocator customisation | No | 2 |
4334(i) | LEWG | 33.13.6.5 [task.promise] | `task<...>::promise_type` supports arbitrary `allocator_arg` position | No | 2 |

## Section 99 (120 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
927(i) | NAD Concepts | 99 [allocator.concepts] | `Dereferenceable` should be `HasDereference` | Yes |  |
1172(i) | Resolved | 99 [allocator.concepts.members] | `select_on_container_(copy|move)_construction` over-constrained | Yes |  |
1074(i) | NAD Concepts | 99 [allocator.element.concepts] | concept map broken by N2840 | Yes |  |
1166(i) | Resolved | 99 [allocator.propagation] | Allocator-specific move/copy break model of move-constructor and move-assignment | Yes |  |
943(i) | C++11 | 99 [atomics.types.address] | `ssize_t` undefined | Yes |  |
1465(i) | Resolved | 99 [atomics.types.address] | Missing arithmetic operators for `atomic_address` | Yes |  |
1466(i) | Resolved | 99 [atomics.types.address] | Silent `const` breakage by `compare_exchange_*` member functions | Yes |  |
1467(i) | Resolved | 99 [atomics.types.address] | Deriving `atomic<T*>` from `atomic_address` breaks type safety | Yes |  |
1468(i) | Resolved | 99 [atomics.types.address] | `atomic_address::compare_exchange_*` member functions should match `atomic_compare_exchange_*` free functions | Yes |  |
1462(i) | Resolved | 99 [atomics.types.integral] | Ambiguous value assignment to `atomic_bool` | Yes |  | 1463
1464(i) | Resolved | 99 [atomics.types.integral] | Underspecified typedefs for atomic integral types | Yes |  |
1463(i) | Dup | 99 [atomics.types.integral] | Inconsistent value assignment for `atomic_bool` | Yes |  | 1462
1247(i) | C++11 | 99 [auto.ptr] | `auto_ptr` is overspecified | Yes |  |
127(i) | TC1 | 99 [auto.ptr] | auto_ptr<> conversion issues | Yes |  |
973(i) | NAD Editorial | 99 [auto.ptr] | auto_ptr characteristics | Yes |  |
249(i) | NAD | 99 [auto.ptr] | Return Type of `auto_ptr::operator=` | Yes |  |
463(i) | NAD | 99 [auto.ptr] | `auto_ptr` usability issues | Yes |  |
2505(i) | Resolved | 99 [auto.ptr.conv] | `auto_ptr_ref` creation requirements underspecified | Yes | 4 |
2(i) | NAD | 99 [auto.ptr.conv] | Auto_ptr conversions effects incorrect | Yes |  |
1080(i) | NAD Concepts | 99 [concept.arithmetic] | Concept ArithmeticLike should provide explicit boolean conversion | Yes |  |
988(i) | NAD | 99 [concept.comparison] | `Reflexivity` meaningless? | Yes |  |
1016(i) | NAD Concepts | 99 [concept.comparison] | Provide `LessThanComparable` and `EqualityComparable` for `FloatingPointType` | Yes |  |
1017(i) | NAD Concepts | 99 [concept.regular] | Floating-point types should not satisfy `Regular` | Yes |  |
1015(i) | NAD Concepts | 99 [concept.transform] | C++ programs - but not users - need to provide support `concept_map`s | Yes |  |
1124(i) | NAD Concepts | 99 [concept.transform] | Invalid definition of concept RvalueOf | Yes |  |
3395(i) | C++20 | 99 [defns.comparison] | Definition for three-way comparison needs to be updated (US 152) | Yes | 1 |
1355(i) | Resolved | 99 [defns.move.assign.op] | The definition of move-assignment operator is redundant | Yes |  |
1356(i) | Resolved | 99 [defns.move.ctor] | The definition of move-constructor is redundant | Yes |  |
2890(i) | C++17 | 99 [defns.obj.state] | The definition of 'object state' applies only to class types | Yes |  |
1064(i) | NAD | 99 [defns.obj.state] | Term "object state" should not refer to classes | Yes |  |
1516(i) | C++11 | 99 [depr.auto.ptr] | No specification for which header contains `auto_ptr` | Yes |  |
1279(i) | C++11 | 99 [depr.base] | forbid `[u|bi]nary_function` specialization | Yes |  |
257(i) | NAD | 99 [depr.base] | STL functional object and iterator inheritance. | Yes |  |
480(i) | NAD | 99 [depr.base] | unary_function and binary_function should have protected nonvirtual destructors | Yes |  |
501(i) | NAD | 99 [depr.base] | Proposal: strengthen guarantees of lib.comparisons | Yes |  |
2479(i) | New | 99 [depr.conversions.buffer] | Unclear how `wbuffer_convert` uses `cvtstate` | No | 4 |
2480(i) | New | 99 [depr.conversions.buffer] | Error handling of `wbuffer_convert` unclear | No | 4 |
1252(i) | C++11 | 99 [depr.conversions.buffer] | `wbuffer_convert::state_type` inconsistency | Yes |  |
2478(i) | New | 99 [depr.conversions.string] | Unclear how `wstring_convert` uses `cvtstate` | No | 4 |
2481(i) | New | 99 [depr.conversions.string] | `wstring_convert` should be more precise regarding "byte-error string" etc. | No | 4 |
2175(i) | C++14 | 99 [depr.conversions.string] | `wstring_convert` and `wbuffer_convert` validity | Yes |  |
2176(i) | C++14 | 99 [depr.conversions.string] | Special members for `wstring_convert` and `wbuffer_convert` | Yes |  |
2174(i) | C++14 | 99 [depr.conversions.string] | `wstring_convert::converted()` should be `noexcept` | Yes |  |
991(i) | C++11 | 99 [depr.conversions.string] | Provide allocator for `wstring_convert` | Yes |  |
2226(i) | NAD | 99 [depr.conversions.string] | `wstring_convert` methods do not take allocator instance | Yes |  |
2854(i) | NAD | 99 [depr.conversions.string] | `wstring_convert` provides no indication of incomplete input or output | Yes | 3 |
721(i) | NAD | 99 [depr.conversions.string] | `wstring_convert` inconsistensies | Yes |  |
174(i) | TC1 | 99 [depr.ios.members] | Typo: `OFF_T` vs. `POS_T` | Yes |  |
175(i) | TC1 | 99 [depr.ios.members] | Ambiguity for `basic_streambuf::pubseekpos()` and a few other functions. | Yes |  |
176(i) | TC1 | 99 [depr.ios.members] | `exceptions()` in `ios_base`...? | Yes |  |
587(i) | NAD Editorial | 99 [depr.istrstream.cons] | iststream ctor missing description | Yes |  |
109(i) | CD1 | 99 [depr.lib.binders] | Missing binders for non-const sequence elements | Yes |  |
362(i) | CD1 | 99 [depr.lib.binders] | bind1st/bind2nd type safety | Yes |  |
798(i) | CD1 | 99 [depr.lib.binders] | Refactoring of binders lead to interface breakage | Yes |  |
2507(i) | New | 99 [depr.locale.stdcvt] | `codecvt_mode` should be a bitmask type | No | 3 |
2229(i) | C++14 | 99 [depr.locale.stdcvt] | Standard code conversion facets underspecified | Yes |  |
2869(i) | Resolved | 99 [depr.locale.stdcvt] | Deprecate sub-clause [locale.stdcvt] | Yes |  |
2896(i) | Dup | 99 [depr.locale.stdcvt] | The contents of `<codecvt>` are underspecified | Yes |  |
1076(i) | NAD Concepts | 99 [depr.negators] | unary/binary_negate need constraining and move support | Yes |  |
2127(i) | C++17 | 99 [depr.storage.iterator] | Move-construction with `raw_storage_iterator` | Yes | 3 |
2454(i) | C++17 | 99 [depr.storage.iterator] | Add `raw_storage_iterator::base()` member | Yes | 0 |
1028(i) | NAD Concepts | 99 [depr.storage.iterator] | `raw_storage_iterator` needs to be a concept-constrained template | Yes |  |
46(i) | TC1 | 99 [depr.str.strstreams] | Minor Annex D errors | Yes |  |
115(i) | TC1 | 99 [depr.strstream.cons] | Typo in strstream constructors | Yes |  |
3128(i) | C++20 | 99 [depr.strstream.oper] | `strstream::rdbuf` needs a `const_cast` | Yes | 0 |
3109(i) | New | 99 [depr.strstreambuf] | `strstreambuf` is copyable | No | 4 |
3095(i) | New | 99 [depr.strstreambuf.virtuals] | `strstreambuf` refers to nonexistent member of `fpos`, `fpos::offset` | Yes | 4 |
66(i) | TC1 | 99 [depr.strstreambuf.virtuals] | Strstreambuf::setbuf | Yes |  |
65(i) | NAD | 99 [depr.strstreambuf.virtuals] | Underspecification of strstreambuf::seekoff | Yes |  |
267(i) | NAD | 99 [depr.strstreambuf.virtuals] | interaction of strstreambuf::overflow() and seekoff() | Yes |  |
2072(i) | C++17 | 99 [depr.temporary.buffer] | Unclear wording about capacity of temporary buffers | Yes | 3 |
425(i) | CD1 | 99 [depr.temporary.buffer] | return value of std::get_temporary_buffer | Yes |  |
1368(i) | C++11 | 99 [depr.uncaught] | Thread safety of `std::uncaught_exception()` | Yes |  |
2980(i) | C++20 | 99 [depr.util.smartptr.shared.atomic] | Cannot `compare_exchange` empty pointers | Yes |  |
2172(i) | C++14 | 99 [depr.util.smartptr.shared.atomic] | Does `atomic_compare_exchange_*` accept `v == nullptr` arguments? | Yes |  |
1030(i) | C++11 | 99 [depr.util.smartptr.shared.atomic] | Missing requirements for smart-pointer safety API | Yes |  |
2445(i) | Resolved | 99 [depr.util.smartptr.shared.atomic] | "Stronger" memory ordering | Yes |  |
1367(i) | C++11 | 99 [exception.unexpected] | Deprecate library support for checking dynamic exception specifications | Yes |  |
4206(i) | New | 99 [exec.syn] | Alias template `connect_result_t` should be constrained with `sender_to` | Yes | 1 |
40(i) | TC1 | 99 [facets.examples] | Meaningless normative paragraph in examples | Yes |  |
148(i) | TC1 | 99 [facets.examples] | Functions in the example facet BoolNames should be const | Yes |  |
217(i) | TC1 | 99 [facets.examples] | Facets example (Classifying Japanese characters) contains errors | Yes |  |
2670(i) | C++17 | 99 [fs.op.system_complete] | `system_complete` refers to undefined variable 'base' | Yes | 0 |
2863(i) | Resolved | 99 [func.default.traits] | Undo `default_order` changes of maps and sets | Yes |  |
843(i) | CD1 | 99 [func.referenceclosure.cons] | Reference Closure | Yes |  |
904(i) | C++11 | 99 [func.ret] | `result_of` argument types | Yes |  |
1270(i) | C++11 | 99 [func.ret] | `result_of` should be moved to `<type_traits>` | Yes |  |
1225(i) | Resolved | 99 [func.ret] | C++0x `result_of` issue | Yes |  |
1274(i) | Resolved | 99 [futures.atomic_future] | `atomic_future` constructor | Yes |  |
1305(i) | Resolved | 99 [futures.atomic_future] | preconditions for `atomic_future` | Yes |  |
1509(i) | NAD Editorial | 99 [futures.atomic_future] | No restriction on calling `future::get` more than once | Yes |  |
1510(i) | NAD Editorial | 99 [futures.atomic_future] | Should be undefined behaviour to call `atomic_future` operations unless `valid()` | Yes |  |
1511(i) | NAD Editorial | 99 [futures.atomic_future] | Synchronize the move-constructor for `atomic_future` | Yes |  |
4251(i) | New | 99 [indirect.asgn] | Move assignment for `indirect` unnecessarily requires copy construction | Yes | 1 |
1063(i) | NAD Concepts | 99 [iterator.backward] | 03 iterator compatibilty | Yes |  |
1105(i) | NAD Concepts | 99 [iterator.concepts.range] | Shouldn't `Range` be an `auto concept` | Yes |  |
2404(i) | C++17 | 99 [mismatch] | `mismatch()`'s complexity needs to be updated | Yes | 0 |
3178(i) | Resolved | 99 [mismatch] | `std::mismatch` is missing an upper bound | Yes | 0 |
1381(i) | C++11 | 99 [pair.range] | Replace `pair`'s range support by proper range facility | Yes |  |
789(i) | CD1 | 99 [rand.adapt.xor] | `xor_combine_engine(result_type)` should be explicit | Yes |  |
790(i) | NAD | 99 [rand.adapt.xor] | `xor_combine::seed` not specified | Yes |  |
1149(i) | NAD Concepts | 99 [rand.concept.urng] | Reformulating NonemptyRange axiom | Yes |  |
732(i) | Resolved | 99 [rand.dist.samp.genpdf] | Defect in [rand.dist.samp.genpdf] | Yes |  | 795
795(i) | Dup | 99 [rand.dist.samp.genpdf] | `general_pdf_distribution` should be dropped | Yes |  | 732
3909(i) | Tentatively NAD | 99 [ranges.refinements] | Issues about `viewable_range` | Yes |  |
529(i) | NAD Editorial | 99 [res.on.required] | The standard encourages redundant and confusing preconditions | Yes |  |
3212(i) | Resolved | 99 [span.tuple] | `tuple_element_t<1, const span<int, 42>>` is `const int` | Yes | 2 |
3138(i) | NAD | 99 [support.contract.cviol] | There is no such thing as assertion-level | Yes | 2 |
3139(i) | NAD | 99 [support.contract.cviol] | `contract_violation`'s special member functions | Yes | 1 |
990(i) | C++11 | 99 [time.clock.monotonic] | `monotonic_clock::is_monotonic` must be `true` | Yes |  |
1409(i) | Resolved | 99 [time.clock.monotonic] | Specify whether `monotonic_clock` is a distinct type or a typedef | Yes |  |
1410(i) | Resolved | 99 [time.clock.monotonic] | Add a feature-detect macro for `monotonic_clock` | Yes |  | 1411
1412(i) | Resolved | 99 [time.clock.monotonic] | Make monotonic clocks mandatory | Yes |  |
1411(i) | Dup | 99 [time.clock.monotonic] | Add a compile-time flag to detect `monotonic_clock` | Yes |  | 1410
1387(i) | C++11 | 99 [tuple.range] | Range support by `tuple` should be removed | Yes |  |
433(i) | NAD | 99 [unexpected] | Contradiction in specification of unexpected() | Yes |  |
1098(i) | C++11 | 99 [util.dynamic.safety] | definition of `get_pointer_safety()` | Yes |  |
1408(i) | C++11 | 99 [util.dynamic.safety] | Allow recycling of pointers after `undeclare_no_pointers` | Yes |  |
858(i) | CD1 | 99 [util.dynamic.safety] | Wording for Minimal Support for Garbage Collection | Yes |  |
1022(i) | NAD Editorial | 99 [util.dynamic.safety] | Pointer-safety API has nothing to do with smart pointers | Yes |  |

## Section B (1 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
922(i) | C++11 | B [implimits] | §[func.bind.place] Number of placeholders | Yes |  |

## Section C (5 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2786(i) | C++17 | C.4.9 [diff.cpp14.utilities] | Annex C should mention `shared_ptr` changes for array support | Yes | 0 |
2201(i) | NAD Editorial | C.8 [diff.library] | Missing macro entries from C standard library | Yes | 2 |
544(i) | NAD Editorial | C.8 [diff.library] | minor NULL problems in C.2 | Yes |  |
1115(i) | NAD Editorial | C.8 [diff.library] | `va_copy` missing from Standard macros table | Yes |  |
1155(i) | NAD Editorial | C.8 [diff.library] | Reference should be to C99 | Yes |  |

## Section D (8 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
3936(i) | NAD | D [depr] | Are implementations allowed to deprecate components not in [depr]? | Yes |  |
4036(i) | WP | D.11 [depr.c.macros] | `__alignof_is_defined` is only implicitly specified in C++ and not yet deprecated | Yes |  |
2940(i) | C++20 | D.13 [depr.meta.types] | `result_of` specification also needs a little cleanup | Yes | 3 |
3042(i) | C++20 | D.13 [depr.meta.types] | `is_literal_type_v` should be inline | Yes | 0 |
2838(i) | C++17 | D.13 [depr.meta.types] | `is_literal_type` specification needs a little cleanup | Yes | 0 |
2438(i) | C++17 | D.17 [depr.iterator] | `std::iterator` inheritance shouldn't be mandated | Yes | 3 |
3840(i) | Open | D.22.1 [depr.fs.path.factory] | `filesystem::u8path` should be undeprecated | Yes | 3 |
3328(i) | C++20 | D.22.1 [depr.fs.path.factory] | Clarify that `std::string` is not good for UTF-8 | Yes | 0 |

## Section arrays.ts 99 (5 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2254(i) | NAD Arrays | 99 [arrays.ts::container.requirements.general] | [arrays.ts] Is `dynarray` an allocator-aware container? | Yes | 3 |
2264(i) | NAD Arrays | 99 [arrays.ts::dynarray] | [arrays.ts] `std::dynarray` defines its initializer-list constructor in terms of a non-existent constructor | Yes | 1 |
2255(i) | NAD Arrays | 99 [arrays.ts::dynarray.cons] | [arrays.ts] `dynarray` constructor ambiguity | Yes | 0 |
2253(i) | NAD Arrays | 99 [arrays.ts::dynarray.overview] | [arrays.ts] `dynarray` should state which container requirements aren't met | Yes | 0 |
2277(i) | NAD Arrays | 99 [arrays.ts::iterator.range] | [arrays.ts] `<dynarray>` is missing in 24.7/1 | Yes | 3 |

## Section concurr.ts 99 (2 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2533(i) | Open | 99 [concurr.ts::futures.unique.future] | [concurr.ts] Constrain threads where `future::then` can run a continuation | No | 4 |
2697(i) | C++23 | 99 [concurr.ts::futures.unique_future] | [concurr.ts] Behavior of `future/shared_future` unwrapping constructor when given an invalid `future` | Yes | 2 |

## Section dec.tr 3 (10 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
602(i) | TRDec | 3 [dec.tr::trdec.types] | [dec.tr] "generic floating type" not defined. | Yes |  |
603(i) | TRDec | 3 [dec.tr::trdec.types] | [dec.tr] Trivially simplifying decimal classes. | Yes |  |
604(i) | TRDec | 3 [dec.tr::trdec.types] | [dec.tr] Storing a reference to a facet unsafe. | Yes |  |
599(i) | TRDec | 3.1 [dec.tr::trdec.types.encodings] | [dec.tr] Say "octets" instead of "bytes." | Yes |  |
598(i) | TRDec | 3.2 [dec.tr::trdec.types.types] | [dec.tr] Conversion to integral should truncate, not round. | Yes |  |
597(i) | NAD | 3.2 [dec.tr::trdec.types.types] | [dec.tr] The notion of 'promotion' cannot be emulated by user-defined types. | Yes |  |
606(i) | NAD | 3.2 [dec.tr::trdec.types.types] | [dec.tr] allow narrowing conversions | Yes |  |
601(i) | TRDec | 3.3 [dec.tr::trdec.types.limits] | [dec.tr] numeric_limits typos | Yes |  |
605(i) | TRDec | 3.4 [dec.tr::trdec.types.cdecfloat] | [dec.tr] <decfloat.h> doesn't live here anymore. | Yes |  |
600(i) | TRDec | 3.9 [dec.tr::trdec.types.cwchar] | [dec.tr] Wrong parameters for wcstod* functions | Yes |  |

## Section filesys.ts 1 (2 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2654(i) | NAD Future | 1 [filesys.ts::fs.scope] | [filesys.ts] [PDTS] Concerns with security and testability | Yes |  |
2601(i) | TS | 1 [filesys.ts::fs.scope] | [filesys.ts] [PDTS] Make namespaces consistent with Library TS policy | Yes |  |

## Section filesys.ts 2 (2 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2602(i) | TS | 2.1 [filesys.ts::fs.conform.9945] | [filesys.ts] [PDTS] Tighten specification when there is no reasonable behavior | Yes |  |
2657(i) | TS | 2.1 [filesys.ts::fs.conform.9945] | [filesys.ts] [PDTS] Inappropriate use of "No diagnostic is required" | Yes |  |

## Section filesys.ts 4 (3 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2603(i) | TS | 4.7 [filesys.ts::fs.def.filename] | [filesys.ts] [PDTS] Filename length needs bullet item | Yes |  |
2604(i) | NAD | 4.14 [filesys.ts::fs.def.parent] | [filesys.ts] [PDTS] Need definition of dot and dot-dot | Yes |  |
2606(i) | TS | 4.15 [filesys.ts::fs.def.path] | [filesys.ts] [PDTS] Path depth is underspecified | Yes |  |

## Section filesys.ts 5 (2 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2656(i) | TS | 5 [filesys.ts::fs.req] | [filesys.ts] [PDTS] Feature test macro for TS version | Yes |  |
2662(i) | TS | 5 [filesys.ts::fs.req] | [filesys.ts] Allocator requirements unspecified | Yes |  |

## Section filesys.ts 6 (10 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2611(i) | NAD Future | 6 [filesys.ts::fs.filesystem.synopsis] | [filesys.ts] [PDTS] Lack of `relative()` operation function | Yes |  |
2612(i) | NAD Future | 6 [filesys.ts::fs.filesystem.synopsis] | [filesys.ts] [PDTS] `uintmax_t` too small for large file sizes | Yes |  |
2607(i) | TS | 6 [filesys.ts::fs.filesystem.synopsis] | [filesys.ts] [PDTS] Unhelpful comment for `struct space_info` | Yes |  |
2608(i) | TS | 6 [filesys.ts::fs.filesystem.synopsis] | [filesys.ts] [PDTS] `file_time_type` underspecified | Yes |  |
2609(i) | TS | 6 [filesys.ts::fs.filesystem.synopsis] | [filesys.ts] [PDTS] Unclear why range-based-for functions return different types | Yes |  |
2634(i) | TS | 6 [filesys.ts::fs.filesystem.synopsis] | [filesys.ts] [PDTS] `enum class directory_options` has no summary | Yes |  |
2635(i) | TS | 6 [filesys.ts::fs.filesystem.synopsis] | [filesys.ts] [PDTS] `directory_options::skip_permission_denied` is not used | Yes |  |
2639(i) | NAD Editorial | 6 [filesys.ts::fs.filesystem.synopsis] | [filesys.ts] [PDTS] `permissions()` is missing from synopsis | Yes |  |
2661(i) | NAD | 6 [filesys.ts::fs.filesystem.synopsis] | [filesys.ts] Surprising `equivalent()` behavior if neither file exists | Yes |  |
2610(i) | NAD | 6 [filesys.ts::fs.filesystem.synopsis] | [filesys.ts] [PDTS] Apparently inconsistent return types from several functions | Yes |  |

## Section filesys.ts 7 (2 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2655(i) | TS | 7 [filesys.ts::fs.err.report] | [filesys.ts] [PDTS] Clarify Error reporting | Yes |  |
2613(i) | NAD | 7 [filesys.ts::fs.err.report] | [filesys.ts] [PDTS] Missing actual error conditions thrown | Yes |  |

## Section filesys.ts 8 (13 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2650(i) | TS | 8 [filesys.ts::class.path] | [filesys.ts] [PDTS] `path::compare(const string& s)` wrong argument type | Yes |  |
2642(i) | NAD | 8 [filesys.ts::class.path] | [filesys.ts] [PDTS] `class path` should have defaulted constructors/destructor/assignments. | Yes |  |
2643(i) | Dup | 8 [filesys.ts::class.path] | [filesys.ts] [PDTS] `path::compare(const string&)` should be `path::compare(const string_type&)` | Yes |  |
2605(i) | TS | 8.1 [filesys.ts::path.generic] | [filesys.ts] [PDTS] Parent of root directory unspecified | Yes |  |
2615(i) | TS | 8.2.2 [filesys.ts::path.type.cvt] | [filesys.ts] [PDTS] Missing behavior for characters with no representation | Yes |  |
2614(i) | TS | 8.4.1 [filesys.ts::path.construct] | [filesys.ts] [PDTS] Incorrect postconditions for `path` copy/move constructor | Yes |  |
2649(i) | TS | 8.4.1 [filesys.ts::path.construct] | [filesys.ts] [PDTS] `path` and `directory_entry` move ctors should not be `noexcept` | Yes |  |
2616(i) | TS | 8.4.3 [filesys.ts::path.append] | [filesys.ts] [PDTS] Append behavior underspecified if target is empty | Yes |  |
2617(i) | NAD | 8.4.5 [filesys.ts::path.modifiers] | [filesys.ts] [PDTS] `path` member `swap()` unnecessary | Yes |  |
2648(i) | TS | 8.4.6 [filesys.ts::path.native.obs] | [filesys.ts] [PDTS] `path::template<class charT>string()` conversion rules | Yes |  |
2646(i) | NAD | 8.4.7 [filesys.ts::path.generic.obs] | [filesys.ts] [PDTS] Do we really need `generic*`? | Yes |  |
2618(i) | TS | 8.4.10 [filesys.ts::path.query] | [filesys.ts] [PDTS] `is_absolute()` return clause confusing | Yes |  |
2619(i) | TS | 8.6.1 [filesys.ts::path.io] | [filesys.ts] [PDTS] Consider using quoted manipulators | Yes |  |

## Section filesys.ts 10 (3 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2659(i) | NAD Editorial | 10 [filesys.ts::fs.enum] | [filesys.ts] [PDTS] Invalid expressions for bitmask types | Yes |  |
2636(i) | TS | 10.2 [filesys.ts::enum.copy_options] | [filesys.ts] [PDTS] `copy_options::copy_symlinks` is not used | Yes |  |
2644(i) | TS | 10.2 [filesys.ts::enum.copy_options] | [filesys.ts] [PDTS] enum classes `copy_options` and `perms` should be bitmask types | Yes |  |

## Section filesys.ts 12 (4 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2640(i) | TS | 12 [filesys.ts::class.directory_entry] | [filesys.ts] [PDTS] `class directory_entry` should retain `operator const path&()` from V2 | Yes |  |
2653(i) | TS | 12 [filesys.ts::class.directory_entry] | [filesys.ts] [PDTS] `directory_entry` multithreading concerns | Yes |  |
2621(i) | TS | 12.3 [filesys.ts::directory_entry.obs] | [filesys.ts] [PDTS] `directory_entry operator==` needs clarification | Yes |  |
2638(i) | NAD | 12.3 [filesys.ts::directory_entry.obs] | [filesys.ts] [PDTS] Make certain functions `noexcept` and drop `error_code` version | Yes |  |

## Section filesys.ts 13 (4 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2641(i) | TS | 13 [filesys.ts::class.directory_iterator] | [filesys.ts] [PDTS] `directory_iterator`, `recursive_directory_iterator`, move construct/assign should be `noexcept` | Yes |  |
2652(i) | TS | 13 [filesys.ts::class.directory_iterator] | [filesys.ts] [PDTS] Better to avoid deriving from `std::iterator` | Yes |  |
2651(i) | Dup | 13 [filesys.ts::class.directory_iterator] | [filesys.ts] [PDTS] `directory_iterator`, `recursive_directory_iterator`, `pointer`/`reference` typedefs wrong | Yes |  |
2622(i) | TS | 13.1 [filesys.ts::directory_iterator.members] | [filesys.ts] [PDTS] `directory_iterator` underspecified | Yes |  |

## Section filesys.ts 15 (16 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2633(i) | TS | 15 [filesys.ts::fs.op.funcs] | [filesys.ts] [PDTS] `unique_path()` is a security vulnerability | Yes |  |
2623(i) | NAD | 15 [filesys.ts::fs.op.funcs] | [filesys.ts] [PDTS] Request for `create_regular_file()` and/or `touch()` | Yes |  |
2660(i) | TS | 15.1 [filesys.ts::fs.op.absolute] | [filesys.ts] [PDTS] Incorrect Throws specification for `absolute()` | Yes |  |
2637(i) | TS | 15.2 [filesys.ts::fs.op.canonical] | [filesys.ts] [PDTS] All functions with `error_code` arguments should be `noexcept` | Yes |  |
2624(i) | TS | 15.3 [filesys.ts::fs.op.copy] | [filesys.ts] [PDTS] Incorrect effects clause for path `copy` | Yes |  |
2625(i) | TS | 15.4 [filesys.ts::fs.op.copy_file] | [filesys.ts] [PDTS] Copying equivalent paths effects not specified | Yes |  |
2645(i) | TS | 15.7 [filesys.ts::fs.op.create_directory] | [filesys.ts] [PDTS] `create_directory` should refer to `perms::all` instead of Posix `S_IRWXU|S_IRWXG|S_IRWXO` | Yes |  |
2626(i) | NAD | 15.13 [filesys.ts::fs.op.equivalent] | [filesys.ts] [PDTS] Equivalence is a volatile property | Yes |  |
2627(i) | TS | 15.14 [filesys.ts::fs.op.file_size] | [filesys.ts] [PDTS] Return value of `uintmax_t` on error? | Yes |  |
2647(i) | TS | 15.25 [filesys.ts::fs.op.last_write_time] | [filesys.ts] [PDTS] `last_write_time()` uses ill-formed cast | Yes |  |
2658(i) | TS | 15.25 [filesys.ts::fs.op.last_write_time] | [filesys.ts] [PDTS] POSIX `utime()` is obsolescent | Yes |  |
2628(i) | NAD | 15.25 [filesys.ts::fs.op.last_write_time] | [filesys.ts] [PDTS] Possible `last_write_time()` postcondition? | Yes |  |
2629(i) | TS | 15.27 [filesys.ts::fs.op.read_symlink] | [filesys.ts] [PDTS] Unclear semantics of `read_symlink` on error | Yes |  |
2630(i) | NAD | 15.28 [filesys.ts::fs.op.remove] | [filesys.ts] [PDTS] `remove()` must avoid race | Yes |  |
2631(i) | NAD | 15.30 [filesys.ts::fs.op.rename] | [filesys.ts] [PDTS] POSIX guarantees atomicity for `rename()` | Yes |  |
2632(i) | TS | 15.36 [filesys.ts::fs.op.system_complete] | [filesys.ts] [PDTS] `system_complete()` example needs clarification | Yes |  |

## Section fund.ts 3 (4 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2418(i) | TS | 3.2.2 [fund.ts::tuple.apply] | [fund.ts] `apply` does not work with member pointers | Yes | 0 |
2371(i) | TS | 3.3.1 [fund.ts::meta.type.synop] | [fund.ts] No template aliases defined for new type traits | Yes | 0 |
2390(i) | TS | 3.3.2 [fund.ts::meta.trans.other] | [fund.ts] Invocation types and rvalues | Yes |  |
2409(i) | TS | 3.3.2 [fund.ts::meta.trans.other] | [fund.ts] SFINAE-friendly `common_type/iterator_traits` should be removed from the fundamental-ts | Yes |  |

## Section fund.ts 4 (2 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2395(i) | TS | 4.2 [fund.ts::func.wrap.func] | [fund.ts] Preconditions: is defined nowhere | Yes | 2 |
2389(i) | TS | 4.2.1 [fund.ts::func.wrap.func.con] | [fund.ts] `function::operator=` is over-specified and handles allocators incorrectly | Yes | 2 |

## Section fund.ts 5 (6 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2305(i) | NAD | 5.3.1 [fund.ts::optional.object.ctor] | [fund.ts] `optional` forwarding construction/assignment | Yes | 4 |
2282(i) | Resolved | 5.3.3 [fund.ts::optional.object.assign] | [fund.ts] Incorrect `is_assignable` constraint in `optional::op=(U&&)` | Yes |  |
2287(i) | Resolved | 5.3.3 [fund.ts::optional.object.assign] | [fund.ts] Incorrect exception safety for `optional` copy assignment operator | Yes |  |
2374(i) | TS | 5.3.5 [fund.ts::optional.object.observe] | [fund.ts] Remarks for `optional::to_value` are too restrictive | Yes | 0 |
2283(i) | Resolved | 5.9 [fund.ts::optional.comp_with_t] | [fund.ts] `optional` declares and then does not define an `operator<()` | Yes |  |
2333(i) | Resolved | 5.11 [fund.ts::optional.hash] | [fund.ts] Hashing disengaged `optional<T>` objects | Yes |  |

## Section fund.ts 6 (1 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2416(i) | Resolved | 6.3 [fund.ts::any.class] | [fund.ts] `std::experimental::any allocator` support is unimplementable | Yes |  |

## Section fund.ts 8 (1 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2410(i) | TS | 8.2.1.1 [fund.ts::memory.smartptr.shared.const] | [fund.ts] `shared_ptr<array>`'s constructor from `unique_ptr` should be constrained | Yes | 0 |

## Section fund.ts 10 (1 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2463(i) | TS | 10.3 [fund.ts::alg.random.sample] | [fund.ts] Incorrect complexity for `sample()` algorithm | Yes | 0 |

## Section fund.ts.v2 3 (7 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2539(i) | TS | 3.3.2 [fund.ts.v2::meta.trans.other] | [fund.ts.v2] `invocation_trait` definition definition doesn't work for surrogate call functions | Yes |  |
2568(i) | TS | 3.3.3 [fund.ts.v2::meta.logical] | [fund.ts.v2] Specification of logical operator traits uses `BaseCharacteristic`, which is defined only for `UnaryTypeTraits` and `BinaryTypeTraits` | Yes | 2 |
2558(i) | TS | 3.3.3 [fund.ts.v2::meta.logical] | [fund.ts.v2] Logical operator traits are broken in the zero-argument case | Yes | 0 |
2570(i) | TS | 3.3.3 [fund.ts.v2::meta.logical] | [fund.ts.v2] `conjunction` and `disjunction` requirements are too strict | Yes | 2 |
2588(i) | TS | 3.3.3 [fund.ts.v2::meta.logical] | [fund.ts.v2] "Convertible to `bool`" requirement in `conjunction` and `disjunction` | Yes | 3 |
2517(i) | TS | 3.7.5 [fund.ts.v2::propagate_const.assignment] | [fund.ts.v2] Two `propagate_const` assignment operators have incorrect return type | Yes | 0 |
2518(i) | TS | 3.7.10 [fund.ts.v2::propagate_const.algorithms] | [fund.ts.v2] Non-member `swap` for `propagate_const` should call member `swap` | Yes | 3 |

## Section fund.ts.v2 4 (7 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2564(i) | Resolved | 4.2 [fund.ts.v2::func.wrap.func] | [fund.ts.v2] `std::experimental::function` constructors taking allocator arguments may throw exceptions | Yes | 3 |
2525(i) | TS | 4.2 [fund.ts.v2::func.wrap.func] | [fund.ts.v2] `get_memory_resource` should be `const` and `noexcept` | Yes | 3 |
2575(i) | TS | 4.2 [fund.ts.v2::func.wrap.func] | [fund.ts.v2] `experimental::function::assign` should be removed | Yes | 0 |
2814(i) | Resolved | 4.2.1 [fund.ts.v2::func.wrap.func.con] | [fund.ts.v2] `to_array` should take rvalue reference as well | Yes | 3 |
2527(i) | TS | 4.2.1 [fund.ts.v2::func.wrap.func.con] | [fund.ts.v2] `ALLOCATOR_OF` for `function::operator=` has incorrect default | Yes | 3 |
2574(i) | TS | 4.2.1 [fund.ts.v2::func.wrap.func.con] | [fund.ts.v2] `std::experimental::function::operator=(F&&)` should be constrained | Yes | 0 |
2526(i) | TS | 4.2.2 [fund.ts.v2::func.wrap.func.mod] | [fund.ts.v2] Incorrect precondition for `experimental::function::swap` | Yes | 0 |

## Section fund.ts.v2 5 (6 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2451(i) | TS | 5.3 [fund.ts.v2::optional.object] | [fund.ts.v2] `optional<T>` should 'forward' `T`'s implicit conversions | Yes |  |
2555(i) | TS | 5.3 [fund.ts.v2::optional.object] | [fund.ts.v2] No handling for over-aligned types in `optional` | Yes | 0 |
2745(i) | TS | 5.3 [fund.ts.v2::optional.object] | [fund.ts.v2] Implementability of LWG 2451 | Yes | 0 |
2750(i) | TS | 5.3.1 [fund.ts.v2::optional.object.ctor] | [fund.ts.v2] LWG 2451 conversion constructor constraint | Yes | 0 |
2561(i) | Resolved | 5.3.4 [fund.ts.v2::optional.object.swap] | [fund.ts.v2] Incorrect exception specifications for 'swap' in C++ Extensions for Library Fundamentals | Yes | 3 |
2417(i) | NAD | 5.7 [fund.ts.v2::optional.relops] | [fund.ts.v2] `std::experimental::optional::operator<` and `LessThanComparable` requirement | Yes |  |

## Section fund.ts.v2 6 (1 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2509(i) | TS | 6.4 [fund.ts.v2::any.nonmembers] | [fund.ts.v2] `any_cast` doesn't work with rvalue reference targets and cannot move with a value target | Yes | 2 |

## Section fund.ts.v2 7 (1 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2553(i) | NAD | 7.3 [fund.ts.v2::string.view.cons] | [fund.ts.v2] `basic_string_view` substring constructor | Yes |  |

## Section fund.ts.v2 8 (7 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2573(i) | TS | 8.2.1 [fund.ts.v2::memory.smartptr.shared] | [fund.ts.v2] `std::hash<std::experimental::shared_ptr<T>>` does not work for arrays | Yes | 0 |
2551(i) | TS | 8.2.1.1 [fund.ts.v2::memory.smartptr.shared.const] | [fund.ts.v2] "Exception safety" cleanup in library fundamentals required | Yes | 0 |
2500(i) | TS | 8.2.1.2 [fund.ts.v2::memory.smartptr.shared.obs] | [fund.ts.v2] fundts.memory.smartptr.shared.obs/6 should apply to cv-unqualified `void` | Yes | 0 |
2521(i) | TS | 8.2.2.1 [fund.ts.v2::memory.smartptr.weak.const] | [fund.ts.v2] `weak_ptr`'s converting move constructor should be modified as well for array support | Yes | 2 |
2522(i) | TS | 8.8 [fund.ts.v2::memory.resource.global] | [fund.ts.v2] Contradiction in `set_default_resource` specification | Yes | 2 |
2516(i) | TS | 8.12.1 [fund.ts.v2::memory.observer.ptr.overview] | [fund.ts.v2] Public "exposition only" members in `observer_ptr` | Yes | 2 |
2515(i) | TS | 8.12.6 [fund.ts.v2::memory.observer.ptr.special] | [fund.ts.v2] Certain comparison operators of `observer_ptr` do not match synopsis | Yes | 0 |

## Section fund.ts.v2 10 (1 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2494(i) | TS | 10.2 [fund.ts.v2::iterator.ostream.joiner] | [fund.ts.v2] `ostream_joiner` needs `noexcept` | Yes | 0 |

## Section fund.ts.v2 13 (2 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2792(i) | TS | 13.1.2 [fund.ts.v2::numeric.ops.gcd] | [fund.ts.v2] `gcd` and `lcm` should support a wider range of input values | Yes |  |
2733(i) | TS | 13.1.2 [fund.ts.v2::numeric.ops.gcd] | [fund.ts.v2] `gcd` / `lcm` and `bool` | Yes | 4 |

## Section fund.ts.v3 4 (1 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
3649(i) | TS | 4.2 [fund.ts.v3::general.feature.test] | [fund.ts.v3] Reinstate and bump `__cpp_lib_experimental_memory_resource` feature test macro | Yes |  |

## Section fund.ts.v3 6 (4 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
3136(i) | C++23 | 6.1.2.3 [fund.ts.v3::propagate_const.class_type_requirements] | [fund.ts.v3] LFTSv3 awkward wording in `propagate_const` requirements | Yes | 3 |
3812(i) | New | 6.1.2.6 [fund.ts.v3::propagate_const.const_observers] | [fund.ts.v3] Incorrect constraint on `propagate_const` conversion function | Yes | 3 |
3413(i) | C++23 | 6.1.2.8 [fund.ts.v3::propagate_const.modifiers] | [fund.ts.v3] `propagate_const`'s `swap`'s `noexcept` specification needs to be constrained and use a trait | Yes | 0 |
2960(i) | C++23 | 6.3 [fund.ts.v3::meta] | [fund.ts.v3] `nonesuch` is insufficiently useless | Yes | 2 |

## Section fund.ts.v3 7 (1 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
3771(i) | C++23 | 7.2.1 [fund.ts.v3::func.wrap.func.overview] | [fund.ts.v3] remove binders typedefs from `function` | Yes |  |

## Section fund.ts.v3 8 (3 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
3167(i) | Open | 8.2 [fund.ts.v3::memory.observer.ptr] | [fund.ts.v3] Does `observer_ptr` support function types? | No | 3 |
4295(i) | New | 8.2.6 [fund.ts.v3::memory.observer.ptr.special] | [fund.ts.v3] `experimental::observer_ptr` should have more constexpr | Yes | 4 |
3411(i) | C++23 | 8.3 [fund.ts.v3::memory.resource.syn] | [fund.ts.v3] Contradictory namespace rules in the Library Fundamentals TS | Yes | 3 |

## Section fund.ts.v3 99 (3 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
3134(i) | Resolved | 99 [fund.ts.v3::meta.type.synop] | [fund.ts.v3] LFTSv3 contains extraneous [meta] variable templates that should have been deleted by P09961 | Yes | 0 |
3135(i) | Resolved | 99 [fund.ts.v3::meta.type.synop] | [fund.ts.v3] LFTSv3 contains two redundant alias templates | Yes | 3 |
3357(i) | Open | 99 [fund.ts.v3::rand.util.randint] | [fund.ts.v3] `default_random_engine` is overspecified for per-thread engine | Yes | 3 |

## Section networking.ts 13 (3 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
3414(i) | C++23 | 13.7 [networking.ts::async.exec.ctx] | [networking.ts] `service_already_exists` has no usable constructors | Yes | 0 |
3124(i) | New | 13.7.5 [networking.ts::async.exec.ctx.globals] | [networking.ts] Unclear how `execution_context` is intended to store services | Yes | 3 |
3010(i) | C++23 | 13.11.1 [networking.ts::async.uses.executor.trait] | [networking.ts] `uses_executor` says "if a type `T::executor_type` exists" | Yes | 0 |

## Section networking.ts 16 (7 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
3114(i) | LEWG | 16 [networking.ts::buffer] | [networking.ts] Permit efficient composition when using `DynamicBuffer` | Yes | 4 |
3020(i) | C++23 | 16.2 [networking.ts::buffer.reqmts] | [networking.ts] Remove spurious nested `value_type` buffer sequence requirement | Yes | 0 |
3163(i) | NAD | 16.2 [networking.ts::buffer.reqmts] | [networking.ts] Buffer sequence iterator equivalency | Yes |  |
2779(i) | C++23 | 16.2.1 [networking.ts::buffer.reqmts.mutablebuffersequence] | [networking.ts] Relax requirements on buffer sequence iterators | Yes |  |
3021(i) | New | 16.2.2 [networking.ts::buffer.reqmts.constbuffersequence] | [networking.ts] Relax pointer equivalence requirement for `ConstBufferSequence` | Yes | 3 |
3027(i) | New | 16.2.4 [networking.ts::buffer.reqmts.dynamicbuffer] | [networking.ts] `DynamicBuffer` `prepare` exception specification | Yes | 3 |
3072(i) | New | 16.2.4 [networking.ts::buffer.reqmts.dynamicbuffer] | [networking.ts] `DynamicBuffer` object lifetimes underspecified | Yes | 3 |

## Section networking.ts 17 (2 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
3073(i) | New | 17 [networking.ts::buffer.stream] | [networking.ts] (`async_`)`read` and (`async_`)`write` don't support `DynamicBuffer` lvalues | Yes | 3 |
3071(i) | C++23 | 17.9 [networking.ts::buffer.read.until] | [networking.ts] `read_until` still refers to "input sequence" | Yes | 0 |

## Section networking.ts 18 (1 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
3002(i) | C++23 | 18.9.4 [networking.ts::socket.acceptor.ops] | [networking.ts] `basic_socket_acceptor::is_open()` isn't `noexcept` | Yes | 0 |

## Section networking.ts 19 (3 issues)

(view only non-Ready open issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
3444(i) | New | 19.1.2 [networking.ts::socket.streambuf.members] | [networking.ts] `net::basic_socket_streambuf::connect(Args&&...)` effects are wrong | No | 2 |
3445(i) | LEWG | 19.2.1 [networking.ts::socket.iostream.cons] | [networking.ts] `net::basic_socket_istream::connect` should be constrained | Yes | 3 |
3443(i) | C++23 | 19.2.1 [networking.ts::socket.iostream.cons] | [networking.ts] `net::basic_socket_iostream` should use `addressof` | Yes | 0 |

## Section parallel.ts 99 (2 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2538(i) | NAD | 99 [parallel.ts::parallel.alg.general.exec] | [parallel.ts] Requirements on data race behavior of iterators and swap should be clarified | Yes |  |
2541(i) | Resolved | 99 [parallel.ts::parallel.alg.overloads] | [parallel.ts] Headers for `ExecutionPolicy` algorithm overloads | Yes | 1 |

## Section tr1 5 (4 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
546(i) | NAD | 5.1.1 [tr1::tr.rand.req] | [tr1] _Longlong and _ULonglong are integer types | Yes |  |
785(i) | NAD | 5.1.4.5 [tr1::tr.rand.eng.disc] | [tr1] Random Number Requirements in TR1 | Yes |  |
701(i) | NAD | 5.2.1.1 [tr1::tr.num.sf.Lnm] | [tr1] assoc laguerre poly's | Yes |  |
702(i) | NAD | 5.2.1.2 [tr1::tr.num.sf.Plm] | [tr1] Restriction in associated Legendre functions | Yes |  |

## Section tr1 8 (2 issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
568(i) | NAD | 8.16.4 [tr1::tr.c99.cmath.over] | [tr1] `log2` overloads missing | Yes |  |
555(i) | NAD Editorial | 8.21 [tr1::tr.c99.boolh] | [tr1] 8.21/1: typo | Yes |  |