# 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.

## Index by Section (non-Ready active issues only)

(view all issues)

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

## Section 3 (2 issues)

(view all issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
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 all 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 (1 issues)

(view all issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2506(i) | SG1 | 6.10.2 [intro.multithread] | Underspecification of atomics | No | 3 |

## Section 16 (47 issues)

(view all 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 |
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 |
3556(i) | New | 16.3.2.3 [structure.requirements] | Specification of when semantic constraints are imposed by use of concepts is unclear | No | 3 |
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 |
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 |
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 |
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 |
3240(i) | New | 16.4.3.2 [using.headers] | Headers declare more than entities | No | 3 |
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 |
2152(i) | LEWG | 16.4.4.3 [swappable.requirements] | Instances of standard container types are not swappable | Yes | 3 |
4155(i) | New | 16.4.4.4 [nullablepointer.requirements] | Cpp17NullablePointer should require that some expression can be contextually converted to bool | Yes | 3 |
4296(i) | New | 16.4.4.5 [hash.requirements] | Clarify that Cpp17Hash does not imply stateless | No | 3 |
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 |
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 |
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 |
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 |
4033(i) | New | 16.4.5.3.3 [macro.names] | §[macro.names] defining macros after importing the standard library | Yes | 3 |
3920(i) | New | 16.4.5.3.4 [extern.names] | Bad footnotes claiming external linkage for entities defined as macros | No | 3 |
3142(i) | New | 16.4.5.8 [res.on.functions] | `std::foo<incomplete>` should be ill-formed NDR | Yes | 3 |
3511(i) | New | 16.4.5.9 [res.on.arguments] | Clarify global permission to move | Yes | 3 |
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 |
4100(i) | New | 16.4.6.4 [global.functions] | Default arguments and signatures of standard library non-member functions | Yes | 3 |
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 |
2414(i) | Open | 16.4.6.9 [reentrancy] | Member function reentrancy should be implementation-defined | Yes | 3 |
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 |
4252(i) | New | 16.4.6.13 [derivation] | Are exposition-only classes considered specified for the purpose of `final`? | Yes | 3 |
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 |

## Section 17 (36 issues)

(view all issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
4182(i) | New | 17.2.3 [support.types.nullptr] | Definition of `NULL` is too broad | Yes | 3 |
3217(i) | New | 17.3.1 [support.limits.general] | `<memory>` and `<execution>` should define `__cpp_lib_parallel_algorithm` | Yes | 3 |
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 |
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 |
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 |
3370(i) | New | 17.4.1 [cstdint.syn] | §[cstdint.syn]p2 and §[headers]p5 are not sufficiently clear | No | 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 |
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 |
2303(i) | New | 17.6.3.4 [new.delete.placement] | Explicit instantiation of `std::vector<UserType>` broken? | No | 3 |
2508(i) | New | 17.6.3.5 [new.delete.dataraces] | §[new.delete.dataraces] wording needs to be updated | No | 3 |
4130(i) | Open | 17.6.5 [ptr.launder] | Preconditions for `std::launder` might be overly strict | Yes | 3 |
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 |
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 |
4087(i) | SG16 | 17.9.3 [exception] | Standard exception messages have unspecified encoding | Yes | 3 |
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 |
4051(i) | New | 17.12.2 [cmp.categories] | A less hacky and more useful way to compare comparison category types | Yes | 3 |
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 |
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 |
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 |
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 |
3954(i) | New | 17.15.1 [support.c.headers.general] | Feature-test macros in C headers (`<stddef.h>` etc.) | No | 3 |
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 |

## Section 18 (5 issues)

(view all 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 |
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 |
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 |

## Section 19 (8 issues)

(view all issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
3011(i) | Open | 19.3 [assertions] | Requirements for `assert(E)` inconsistent with C | No | 2 |
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 |
3053(i) | New | 19.5.4.1 [syserr.errcode.overview] | Prohibit `error_code` construction from rvalues of `error_category` | Yes | 3 |
3162(i) | New | 19.5.8.2 [syserr.syserr.members] | `system_error::system_error(error_code ec)` not explicit | Yes | 3 |
3625(i) | Open | 19.6.2 [stacktrace.syn] | Should `<stacktrace>` provide range access function templates? | 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 (32 issues)

(view all issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
4431(i) | New | 20.2.2 [memory.syn] | Parallel `std::ranges::destroy` should allow exceptions | Yes |  |
3454(i) | Open | 20.2.3 [pointer.traits] | `pointer_traits::pointer_to` should be `constexpr` | Yes | 4 |
4058(i) | LEWG | 20.2.4 [pointer.conversion] | `std::to_address()` should be SFINAE-friendly | Yes | 3 |
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 |
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 |
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 |
3665(i) | New | 20.2.9.2 [allocator.traits.types] | Is `std::allocator_traits<Alloc>::rebind_alloc` SFINAE-friendly? | No | 3 |
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 |
3684(i) | New | 20.2.10.2 [allocator.members] | `std::allocator<T>::allocate_at_least` in constant evaluation | Yes | 3 |
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 |
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 |
2594(i) | New | 20.3.2.2 [util.smartptr.shared] | Contradicting definition of empty `shared_ptr` on `shared_ptr(nullptr, d)` | Yes | 3 |
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 |
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 |
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 |
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 |
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 |
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 |
3634(i) | New | 20.5.4 [mem.res.global] | When are static-duration `memory_resource` objects destroyed? | No | 3 |
2848(i) | New | 20.5.5.2 [mem.res.pool.options] | Pass-through threshold for pool allocator | No | 3 |

## Section 21 (33 issues)

(view all 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 |
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 |
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 |
4383(i) | New | 21.3.5 [const.wrap.class] | `constant_wrapper`'s pseudo-mutators are underconstrained | Yes | 1 |
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 |
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 |
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 |
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 |  |
4424(i) | New | 21.4.16 [meta.reflection.define.aggregate] | `meta::define_aggregate` should require a class type | Yes | 1 |

## Section 22 (69 issues)

(view all issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2153(i) | LEWG | 22.2.2 [utility.swap] | Narrowing of the non-member `swap` contract | No | 2 |
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 |
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 |
2766(i) | New | 22.3.3 [pairs.spec] | Swapping non-swappable types | Yes | 3 |
3166(i) | New | 22.3.4 [pair.astuple] | No such descriptive element as Value: | No | 3 |
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 |
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 |
4040(i) | New | 22.4.7 [tuple.helper] | Contradictory specification of `std::tuple_size` | No | 3 |
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 |
2990(i) | Open | 22.5.3 [optional.optional] | `optional::value_type` is not always a value type | Yes | 3 |
2811(i) | New | 22.5.3.2 [optional.ctor] | "Selected constructor" wording is incorrect for `optional`/`variant`/`any` | Yes | 3 |
2746(i) | New | 22.5.3.4 [optional.assign] | Inconsistency between requirements for `emplace` between `optional` and `variant` | Yes | 3 |
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 |
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 |
4370(i) | Tentatively Ready | 22.5.9 [optional.comp.with.t] | Comparison of `optional<T>` to `T` may be ill-formed | Yes |  |
3627(i) | Tentatively Ready | 22.5.10 [optional.specalg] | Inconsistent specifications for `std::make_optional` overloads | Yes | 3 |
2881(i) | New | 22.6.3 [variant.variant] | Adopt section III of P0308R0 | No | 3 |
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 |
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 |
4197(i) | New | 22.6.7 [variant.visit] | Complexity of `std::visit` with immediate functions | Yes | 2 |
3416(i) | New | 22.7.4 [any.class] | The Throws: specification of `std::any` does not mention allocation | No | 3 |
3423(i) | New | 22.7.5 [any.nonmembers] | `std::any_cast` should never return a cv-qualified type | Yes | 3 |
3688(i) | New | 22.8.4 [expected.bad] | Exception specifications of copy/move member functions of `std::bad_expected_access` | No | 2 |
3891(i) | New | 22.8.6.1 [expected.object.general] | LWG 3870 breaks `std::expected<cv T, E>` | Yes | 2 |
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 |
4366(i) | Tentatively Ready | 22.8.6.8 [expected.object.eq] | Heterogeneous comparison of `expected` may be ill-formed | 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 |
4294(i) | Tentatively Ready | 22.9.2.2 [bitset.cons] | `bitset(const CharT*)` constructor needs to be constrained | Yes |  |
3805(i) | New | 22.10 [function.objects] | Expression evaluating to a call wrapper is a prvalue, not an object | No | 4 |
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 |
3046(i) | New | 22.10.6 [refwrap] | Do not require `reference_wrapper` to support non-referenceable function types | 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 |
3979(i) | New | 22.10.13 [func.not.fn] | Should we reject `std::bind_front<42>()` and its friends? | Yes | 4 |
4264(i) | New | 22.10.17.1 [func.wrap.general] | Skipping indirection is not allowed for `function_ref` | Yes | 2 |
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 |
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 |
3968(i) | New | 22.11.8 [bit.endian] | `std::endian::native` value should be more specific about object representations | Yes | 4 |

## Section 23 (85 issues)

(view all 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 |
3059(i) | New | 23.2 [container.requirements] | Wrong requirements for map-like associative container assignment? | No | 3 |
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 |
3976(i) | New | 23.2.2.5 [container.alloc.reqmts] | What does it mean for a type to be "allocator aware"? | No | 4 |
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 |
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 |
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 |
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 |
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 |
2189(i) | Open | 23.2.8.2 [unord.req.except] | Throwing `swap` breaks unordered containers' state | No | 3 |
617(i) | Open | 23.3.3 [array] | `std::array` is a sequence that doesn't satisfy the sequence requirements? | No | 3 |
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 |
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 |
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 |
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 |
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 |  |
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 |
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 |
4228(i) | Tentatively NAD | 23.3.14.1 [vector.bool.pspc] | Does `vector<bool, Allocator>` mandate that `Allocator::value_type` is `bool`? | No |  |
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 |
4223(i) | New | 23.4.1 [associative.general] | Deduction guides for maps are mishandling tuples and references | Yes | 2 |
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 |
2713(i) | New | 23.5 [unord] | More missing allocator-extended constructors for unordered containers | Yes | 3 |
4292(i) | Tentatively Ready | 23.5.3.1 [unord.map.overview] | Unordered container local iterators should be constexpr iterators | 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 |  |
3189(i) | New | 23.6.4 [priority.queue] | Missing requirement for `std::priority_queue` | No | 3 |
3161(i) | Open | 23.6.6 [stack] | Container adapters mandate use of `emplace_back` but don't require it | Yes | 3 |
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 |
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 |
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 |
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 |
4352(i) | New | 23.6.9.1 [flat.multimap.overview] | "operations on flat_multimap are equivalent to those of flat_map" | No | 3 |
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 |  |
4180(i) | New | 23.6.12.5 [flat.multiset.modifiers] | Inconsistent constraints on `flat_foo::emplace` | Yes | 3 |
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 |
4397(i) | New | 23.7.2.2.2 [span.cons] | Improve `span(R&& r)` | Yes | 3 |
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 |  |
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 |
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 |
4266(i) | Tentatively Ready | 23.7.3.4.7 [mdspan.layout.stride] | `layout_stride::mapping` should treat empty mappings as exhaustive | Yes |  |
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 |

## Section 24 (48 issues)

(view all 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 |
1213(i) | Open | 24.3 [iterator.requirements] | Meaning of valid and singular iterator underspecified | No | 4 |
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 |  |
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 |
3287(i) | New | 24.3.2.3 [iterator.traits] | Exposition-only `cpp17-input-iterator` concept is needlessly complex | Yes | 3 |
3890(i) | New | 24.3.4.4 [iterator.concept.winc] | ABI issue for integer-class types | Yes | 3 |
3716(i) | New | 24.3.4.11 [iterator.concept.forward] | §[iterator.concept.forward][forward.iterators] Two different definitions of multi-pass guarantee | No | 3 |
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 |
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 |
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 |
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 |
4303(i) | New | 24.4.4.3 [range.iter.op.distance] | `std::decay_t` in the specification of `ranges::distance` is problematic | Yes | 4 |
2858(i) | New | 24.5.1 [reverse.iterators] | LWG 2472: actually an incompatibility with C++03 | Yes | 4 |
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 |
3602(i) | New | 24.5.1.4 [reverse.iter.cons] | `reverse_iterator`'s converting assignment is overconstrained | Yes | 3 |
3725(i) | New | 24.5.1.6 [reverse.iter.elem] | `reverse_iterator::operator->` should not use `prev` for non-pointer iterators | Yes | 3 |
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 |
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 |
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 |
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 |
4115(i) | New | 24.5.4.6 [move.iter.elem] | `move_iterator::operator*` should have conditional `noexcept` specification | Yes | 4 |
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 |
3748(i) | New | 24.5.5.6 [common.iter.cmp] | `common_iterator` and `counted_iterator`' `operator-` are missing cast to return type | Yes | 3 |
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 |
3108(i) | New | 24.6.4.2 [istreambuf.iterator.proxy] | `istreambuf_iterator::proxy::operator*` should be `const` | Yes | 3 |
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 |

## Section 25 (76 issues)

(view all 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 |
4184(i) | Tentatively NAD | 25.3 [range.access] | Domain of `ranges::cmeow` doesn't match `ranges::meow` | No |  |
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 |
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 |  |
3896(i) | New | 25.4.6 [range.refinements] | The definition of `viewable_range` is not quite right | Yes | 4 |
4003(i) | Tentatively NAD | 25.5.3 [view.interface] | `view_interface::back` is overconstrained | Yes |  |
4183(i) | New | 25.5.4.1 [range.subrange.general] | `subrange` should provide `data()` | Yes | 4 |
4010(i) | New | 25.5.4.3 [range.subrange.access] | `subrange::advance` should be improved | Yes | 3 |
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 |
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 |
4417(i) | New | 25.6.4.1 [range.iota.overview] | `views::indices` is underconstrained | Yes |  |
3614(i) | New | 25.6.4.2 [range.iota.view] | `iota_view::size` and the most negative signed integer values | Yes | 3 |
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 |
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 |
3955(i) | New | 25.6.5.2 [range.repeat.view] | Add `noexcept` to several `repeat_view[::iterator]` member functions | Yes | 3 |
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 |
3489(i) | New | 25.6.6.3 [range.istream.iterator] | Improve `istream_view` wording | 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 |
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 |
3829(i) | New | 25.7.7.2 [range.as.rvalue.view] | `as_rvalue_view::end` should improve non-common case | Yes | 3 |
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 |
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 |
3666(i) | New | 25.7.14 [range.join] | `join_view`'s difference type is too small | No | 2 |
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 |
3873(i) | New | 25.7.15.2 [range.join.with.view] | `join_with_view`'s `const begin` is underconstrained | No | 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 |
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 |
4017(i) | New | 25.7.17.3 [range.split.iterator] | Behavior of `std::views::split` on an empty range | Yes | 3 |
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 |
4019(i) | SG9 | 25.7.21 [range.reverse] | Reversing an infinite range leads to an infinite loop | No | 3 |
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 |
3797(i) | New | 25.7.23.2 [range.elements.view] | `elements_view` insufficiently constrained | Yes | 2 |
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 |
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 |
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 |
4006(i) | Tentatively NAD | 25.7.29.4 [range.chunk.outer.value] | `chunk_view::outer-iterator::value_type` should provide `empty` | Yes |  |
4254(i) | New | 25.7.32.3 [range.stride.iterator] | `stride_view::iterator` should provide `operator->` | Yes | 3 |
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 |
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 |
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 |

## Section 26 (37 issues)

(view all 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 |
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 |
4273(i) | New | 26.3.6 [execpol] | Standard execution policy types should be conventional tag class types | Yes | 3 |
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 |  |
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 |
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 |
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 |
3868(i) | LEWG | 26.7.5 [alg.replace] | Constrained algorithms should not require `output_iterator` | Yes | 4 |
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 |
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 |
4111(i) | New | 26.8.4 [alg.binary.search] | LWG 270 and ranges version of binary search algorithms | No | 3 |
2973(i) | LEWG | 26.8.6 [alg.merge] | `inplace_merge` exact comparison count complexity prohibits useful real-world optimizations | Yes | 4 |
3534(i) | LEWG | 26.8.7.4 [set.intersection] | `ranges::set_intersection` and `ranges::set_difference` algorithm requirements are too strict | Yes | 3 |
3029(i) | Open | 26.8.8.3 [pop.heap] | `pop_heap` over-constrains input | 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 |
3487(i) | New | 26.10 [numeric.ops] | Missing precondition on input and output aliasing of [numeric.ops] | No | 3 |
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 |
3463(i) | New | 26.10.11 [transform.inclusive.scan] | Incorrect requirements for `transform_inclusive_scan` without initial value | Yes | 3 |
4265(i) | Tentatively Ready | 26.10.16 [numeric.ops.midpoint] | `std::midpoint` should not accept `const bool` | 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 |
3647(i) | New | 26.11.2 [special.mem.concepts] | `nothrow-input-iterator` constraints should not mention copying | Yes | 3 |
3888(i) | New | 26.11.8 [specialized.construct] | Most ranges uninitialized memory algorithms are underconstrained | Yes | 3 |
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 |

## Section 27 (22 issues)

(view all issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2513(i) | New | 27.1 [strings.general] | Missing requirements for `basic_string::value_type` | No | 4 |
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 |
3942(i) | New | 27.2.4 [char.traits.specializations] | Inconsistent use of `const char_type&` in standard specializations of `std::char_traits` | Yes | 3 |
4063(i) | New | 27.2.4.2 [char.traits.specializations.char] | Freestanding `std::char_traits<char>::eof` depends on non-freestanding `EOF` | No | 2 |
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 |
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 |
3457(i) | New | 27.3.3 [string.view.template] | `*this` is not invalidated | Yes | 3 |
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 |
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 |
4029(i) | New | 27.4.3.1 [basic.string.general] | `basic_string` accidentally fails to meet the reversible container requirements | Yes | 3 |
3663(i) | New | 27.4.3.3 [string.cons] | `basic_string(const T&, const Alloc&)` turns moves into copies | Yes | 3 |
4378(i) | New | 27.4.3.6 [string.access] | Inconsistency between `std::basic_string`'s `data()` and `operator[]` specification | Yes | 4 |
3662(i) | New | 27.4.3.7.2 [string.append] | `basic_string::append/assign(NTBS, pos, n)` suboptimal | Yes | 3 |
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 |
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 |
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 |

## Section 28 (61 issues)

(view all issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
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 |
3353(i) | New | 28.3.3.1 [locale] | `locale`'s copy assignment operator should return `locale&` | 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 |
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 |
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 |
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 |
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 |
2983(i) | New | 28.3.4.7.3.3 [locale.money.put.virtuals] | `money_put::do_put` underspecified | Yes | 3 |
2691(i) | New | 28.3.4.7.4 [locale.moneypunct] | `money_base::space` and `do_put`: U+0020 versus `fill` | Yes | 3 |
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 |
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 |
4078(i) | New | 28.5.5 [format.functions] | What if arguments alias the output buffer in `std::format_to`? | No | 4 |
3993(i) | New | 28.5.6.1 [formatter.requirements] | The `parse` function of a BasicFormatter type needs to be `constexpr` | 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 |
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 |
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 |  |
4107(i) | New | 28.5.7.4 [format.range.fmtmap] | Map formatter may conflict with user-defined specializations of `pair`/`tuple` formatters | 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 |
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 |
3998(i) | New | 28.6.4 [re.const] | Constants in `std::regex_constants` should be allowed to be enumerators | No | 3 |
2331(i) | Open | 28.6.4.2 [re.synopt] | `regex_constants::collate`'s effects are inaccurately summarized | Yes | 3 |
3605(i) | New | 28.6.4.3 [re.matchflag] | `regex_constants::match_prev_avail` is underspecified | No | 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 |
3261(i) | New | 28.6.7 [re.regex] | `regex` components' `noexcept` annotations appear broken for POCMA or throwing `BidirectionalIterator` | No | 3 |
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 |
2137(i) | Open | 28.6.7.3 [re.regex.assign] | Misleadingly constrained post-condition in the presence of exceptions | Yes | 3 |
3126(i) | New | 28.6.8 [re.submatch] | There's no `std::sub_match::compare(string_view)` overload | Yes | 3 |
2216(i) | New | 28.6.10.4 [re.alg.replace] | `regex_replace(basic_string)` allocator handling | No | 3 |
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 |

## Section 29 (43 issues)

(view all issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
4161(i) | New | 29.4 [complex.numbers] | Some free functions don't automatically work for program-defined `std::complex<NonFloatingPoint>` | No | 3 |
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 |
2714(i) | New | 29.4.6 [complex.ops] | `complex` stream extraction underspecified | Yes | 3 |
2846(i) | New | 29.4.10 [cmplx.over] | Undefined phrase "effectively cast" | Yes | 3 |
4109(i) | New | 29.5.3.1 [rand.req.genl] | Instantiating templates in §[rand] with `int8_t`/`uint8_t` is undefined behavior | Yes | 3 |
4289(i) | LEWG | 29.5.3.2 [rand.req.seedseq] | Seed sequence is overspecified | Yes | 3 |
4212(i) | New | 29.5.4.5 [rand.eng.philox] | Make the round states in [rand.eng.philox] explicit | Yes | 3 |
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 |
4052(i) | New | 29.5.9.6.2 [rand.dist.samp.pconst] | Bogus requirements for `piecewise_linear_distribution` | Yes | 4 |
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 |
2423(i) | New | 29.6.5 [template.slice.array] | Missing specification `slice_array`, `gslice_array`, `mask_array`, `indirect_array` copy constructor | Yes | 4 |
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 |
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 |
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 |
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 |
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 |  |
4413(i) | Tentatively Ready | 29.10.4 [simd.traits] | Unused/left-over `simd::alignment` specialization for `basic_mask` | 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 (22 issues)

(view all issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
2592(i) | New | 30.2 [time.syn] | Require that `chrono::duration_cast`s from smaller durations to larger durations do not overflow | Yes | 4 |
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 |
3503(i) | New | 30.5.8 [time.duration.cast] | `chrono::ceil` has surprising requirement | Yes | 3 |
2383(i) | Open | 30.5.9 [time.duration.literals] | Overflow cannot be ill-formed for chrono::duration integer literals | No | 3 |
4288(i) | New | 30.7.2.2 [time.clock.system.members] | The Constraints: element in [time.clock.system.members] is probably wrong | Yes | 3 |
4257(i) | Tentatively Ready | 30.7.9 [time.clock.local] | Stream insertion for `chrono::local_time` should be constrained | Yes |  |
4274(i) | Tentatively Ready | 30.9.2 [time.hms.members] | The `chrono::hh_mm_ss` constructor is ill-formed for unsigned durations | Yes |  |
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 |
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 |
4139(i) | New | 30.11.8 [time.zone.leap] | §[time.zone.leap] recursive constraint in `<=>` | No | 3 |
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 |
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 |

## Section 31 (35 issues)

(view all issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
423(i) | Open | 31 [input.output] | Effects of negative `streamsize` in iostreams | Yes | 3 |
3696(i) | New | 31.2.2 [stream.types] | "Basic integral types" should not be used | Yes | 3 |
3910(i) | New | 31.4.2 [iostream.objects.overview] | The effects of including `<iostream>` on initialization are not yet precisely specified | Yes | 4 |
3675(i) | New | 31.5.2.6 [ios.base.storage] | `std::ios_base::iword/pword` might be misspecified | Yes | 4 |
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 |
2214(i) | Open | 31.5.4.2 [basic.ios.cons] | Clarify `basic_ios::init` call restrictions | Yes | 4 |
2504(i) | New | 31.6.3 [streambuf] | `basic_streambuf` is not an abstract class | No | 3 |
3658(i) | New | 31.6.3.3.5 [streambuf.pub.put] | `basic_streambuf::sputn` is both overspecified and underspecified | 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 |
2497(i) | New | 31.7.6.2.4 [ostream.sentry] | Use of `uncaught_exception()` | Yes | 3 |
4101(i) | New | 31.7.6.3.2 [ostream.inserters.arithmetic] | LWG 117 loses the sign for negative NaN on some architectures | Yes | 3 |
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 |
3501(i) | New | 31.7.6.5 [ostream.manip] | `basic_syncbuf`-related manipulators refer to some `Allocator` without defining it | 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 |
2984(i) | New | 31.7.8 [ext.manip] | `put_money(99)` is unnecessarily undefined | Yes | 3 |
3309(i) | New | 31.8 [string.streams] | Is `<ios>` implicitly `#include`d by `<sstream>`, `<fstream>` etc.? | No | 3 |
3992(i) | Tentatively NAD | 31.8.2.4 [stringbuf.members] | `basic_stringbuf::str()&&` should enforce 𝒪(1) | Yes | 4 |
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 |
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 |
3098(i) | New | 31.12.6.5.9 [fs.path.decompose] | Misleading example for `filesystem::path::filename()` | Yes | 3 |
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 |
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 |
4070(i) | Open | 31.12.6.9.2 [fs.path.fmtr.funcs] | Transcoding by `std::formatter<std::filesystem::path>` | Yes | 2 |
2947(i) | New | 31.12.8.1 [fs.enum.path.format] | Clarify several filesystem terms | No | 3 |
3078(i) | New | 31.12.10 [fs.class.directory.entry] | `directory_entry`, `directory_iterator` and `recursive_directory_iterator` perform needless path copies | No | 3 |
3668(i) | New | 31.12.11.2 [fs.dir.itr.members] | `[recursive_]directory_iterator` constructors refer to undefined `options` | Yes | 3 |
2708(i) | Open | 31.12.12.2 [fs.rec.dir.itr.members] | `recursive_directory_iterator::recursion_pending()` is incorrectly specified | Yes | 2 |
4279(i) | New | 31.12.13.2 [fs.op.absolute] | §[fs.op.absolute] Non-normative encouragement should be Recommended practice | No | 4 |
3057(i) | Open | 31.12.13.4 [fs.op.copy] | Correct `copy_options` handling | Yes | 2 |
3056(i) | New | 31.12.13.5 [fs.op.copy.file] | `copy_file()` copies which attributes? | Yes | 3 |
3744(i) | New | 31.12.13.6 [fs.op.copy.symlink] | `copy_symlink(junction, new_symlink)`'s behavior is unclear | No | 3 |

## Section 32 (46 issues)

(view all issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
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 |
4362(i) | Tentatively NAD | 32.3.8 [stoptoken.inplace] | Inconsistent usage of `constexpr` for `inplace_stop_token` and `inplace_stop_source` | 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 |
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 |
3633(i) | New | 32.5 [atomics] | Atomics are copy constructible and copy assignable from `volatile` atomics | Yes | 3 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
3418(i) | New | 32.5.9 [atomics.nonmembers] | Deprecated free functions in `<atomic>` | Yes | 3 |
1488(i) | LEWG | 32.6 [thread.mutex] | Improve interoperability between the C++0x and C1x threads APIs | No | 4 |
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 |
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 |
3898(i) | New | 32.9.3.3 [thread.barrier.class] | Possibly unintended preconditions for completion functions of `std::barrier` | Yes | 3 |
2530(i) | Open | 32.10.5 [futures.state] | Clarify observable side effects of releasing a shared state | No | 3 |
2532(i) | Open | 32.10.6 [futures.promise] | Satisfying a `promise` at thread exit | Yes | 3 |
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 |
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 |

## Section 33 (48 issues)

(view all 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 |
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 |
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 |
4368(i) | New | 33.9.5 [exec.domain.default] | Potential dangling reference returned from `transform_sender` | Yes | 1 |
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 |
4395(i) | New | 33.9.12.3 [exec.write.env] | `write_env` implementation-detail lambda should have explicit return type | No | 2 |
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 |
4215(i) | New | 33.12.1 [exec.run.loop] | `run_loop::finish` should be `noexcept` | Yes | 2 |
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 (10 issues)

(view all issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
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 |
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 |
2507(i) | New | 99 [depr.locale.stdcvt] | `codecvt_mode` should be a bitmask type | No | 3 |
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 |
4206(i) | New | 99 [exec.syn] | Alias template `connect_result_t` should be constrained with `sender_to` | Yes | 1 |
4251(i) | New | 99 [indirect.asgn] | Move assignment for `indirect` unnecessarily requires copy construction | Yes | 1 |
3909(i) | Tentatively NAD | 99 [ranges.refinements] | Issues about `viewable_range` | Yes |  |

## Section D (1 issues)

(view all issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
3840(i) | Open | D.22.1 [depr.fs.path.factory] | `filesystem::u8path` should be undeprecated | Yes | 3 |

## Section concurr.ts 99 (1 issues)

(view all 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 |

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

(view all issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
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 |

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

(view all 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 |

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

(view all issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
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 (1 issues)

(view all issues)

Issue | Status | Section | Title | Proposed Resolution | Priority | Duplicates
--- | --- | --- | --- | --- | --- | ---
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 |

## Section networking.ts 16 (4 issues)

(view all 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 |
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 (1 issues)

(view all 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 |

## Section networking.ts 19 (2 issues)

(view all 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 |