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 |
|
2146(i) |
Open |
16.4.4.2 [utility.arg.requirements] |
Are reference types Copy /Move-Constructible /Assignable or 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 |
|
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 |
|
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 |
|
4149(i) |
New |
16.4.5.3.3 [macro.names] |
User defined macros without standard headers (294 redux) |
Yes |
|
|
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 |
|
|
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 |
|
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 |
|
4145(i) |
New |
16.4.6.10 [res.on.data.races] |
Unclear how [res.on.data.races] apply to templated functions |
No |
3 |
|
4129(i) |
New |
16.4.6.10 [res.on.data.races] |
Possibly incorrect wording for data race avoidance |
Yes |
|
|
3854(i) |
New |
16.4.6.13 [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.13 [res.on.exception.handling] |
§[res.on.exception.handling]#3 cannot apply to types with implicitly declared destructors |
Yes |
3 |
|
Issue |
Status |
Section |
Title |
Proposed Resolution |
Priority |
Duplicates |
3217(i) |
New |
17.3.1 [support.limits.general] |
<memory> and <execution> should define __cpp_lib_parallel_algorithm |
Yes |
3 |
|
4126(i) |
Tentatively Ready |
17.3.2 [version.syn] |
Some feature-test macros for fully freestanding features are not yet marked freestanding |
Yes |
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) |
New |
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 |
|
4087(i) |
SG16 |
17.9.3 [exception] |
Standard exception messages have unspecified encoding |
Yes |
3 |
|
2453(i) |
New |
17.10 [support.initlist] |
§[iterator.range] and now [iterator.container] aren't available via <initializer_list> |
No |
3 |
|
2493(i) |
New |
17.10 [support.initlist] |
initializer_list supports incomplete classes |
No |
4 |
|
4051(i) |
New |
17.11.2 [cmp.categories] |
A less hacky and more useful way to compare comparison category types |
Yes |
|
|
3584(i) |
New |
17.11.3 [cmp.common] |
Clarify common comparison category conversions |
Yes |
3 |
|
3587(i) |
New |
17.11.4 [cmp.concept] |
std::three_way_comparable_with<T, U, void> can be satisfied but can't be modeled |
No |
3 |
|
4157(i) |
Tentatively Ready |
17.11.6 [cmp.alg] |
The resolution of LWG3465 was damaged by P2167R3 |
Yes |
|
|
3932(i) |
New |
17.11.6 [cmp.alg] |
Expression-equivalence is sometimes unimplementable when passing prvalue expressions to comparison CPOs |
No |
3 |
|
3491(i) |
New |
17.11.6 [cmp.alg] |
What is a "decayed type"? |
No |
3 |
|
3653(i) |
New |
17.12.2 [coroutine.syn] |
<coroutine> is freestanding, but uses std::hash which is not |
No |
3 |
|
3945(i) |
New |
17.13.2 [cstdarg.syn] |
§[cstdarg.syn] 'Compatible types' are undefined |
No |
3 |
|
3954(i) |
New |
17.14.1 [support.c.headers.general] |
Feature-test macros in C headers (<stddef.h> etc.) |
No |
3 |
|
3883(i) |
New |
17.14.7 [support.c.headers.other] |
§[support.c.headers.other] Ambiguity in the requirements for includes |
Yes |
4 |
|
3799(i) |
New |
17.14.7 [support.c.headers.other] |
Should <math.h> provide 3-argument ::hypot overloads? |
No |
3 |
|
3484(i) |
New |
17.14.7 [support.c.headers.other] |
Should <stddef.h> declare ::nullptr_t ? |
Yes |
3 |
|
Issue |
Status |
Section |
Title |
Proposed Resolution |
Priority |
Duplicates |
3454(i) |
LEWG |
20.2.3 [pointer.traits] |
pointer_traits::pointer_to should be constexpr |
Yes |
|
|
4058(i) |
New |
20.2.4 [pointer.conversion] |
std::to_address() should be SFINAE-friendly |
Yes |
|
|
2421(i) |
New |
20.2.5 [ptr.align] |
Non-specification of handling zero size in std::align [ptr.align] |
No |
3 |
|
4168(i) |
New |
20.2.6 [obj.lifetime] |
std::start_lifetime_as inadvertently has undefined behavior due to use of std::bit_cast |
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 |
|
4144(i) |
Tentatively Ready |
20.3.1.3.1 [unique.ptr.single.general] |
Disallow unique_ptr<T&, D> |
Yes |
|
|
4148(i) |
Tentatively Ready |
20.3.1.3.5 [unique.ptr.single.observers] |
unique_ptr::operator* should not allow dangling references |
Yes |
|
|
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 |
|
|
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 |
|
3216(i) |
Tentatively Ready |
20.3.2.2.7 [util.smartptr.shared.create] |
Rebinding the allocator before calling construct /destroy in allocate_shared |
Yes |
3 |
|
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 |
|
3681(i) |
New |
20.4.1 [mem.res.syn] |
Further considerations on LWG 3679 |
No |
4 |
|
3637(i) |
New |
20.4.2 [mem.res.class] |
pmr::memory_resource::do_allocate needs clarification |
No |
3 |
|
3634(i) |
New |
20.4.4 [mem.res.global] |
When are static-duration memory_resource objects destroyed? |
No |
3 |
|
2848(i) |
New |
20.4.5.2 [mem.res.pool.options] |
Pass-through threshold for pool allocator |
No |
3 |
|
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 |
|
2939(i) |
Open |
21.3.3 [meta.type.synop] |
Some type-completeness constraints of traits are overspecified |
Yes |
2 |
|
3099(i) |
Open |
21.3.3 [meta.type.synop] |
is_assignable<Incomplete&, Incomplete&> |
Yes |
2 |
|
2922(i) |
LEWG |
21.3.3 [meta.type.synop] |
The *_constant<> templates do not make use of template<auto> |
No |
|
|
4113(i) |
Tentatively Ready |
21.3.5.4 [meta.unary.prop] |
Disallow has_unique_object_representations<Incomplete[]> |
Yes |
|
|
3967(i) |
New |
21.3.5.4 [meta.unary.prop] |
The specification for std::is_nothrow_* traits may be ambiguous in some cases involving noexcept(false) |
No |
|
|
3929(i) |
New |
21.3.5.4 [meta.unary.prop] |
Preconditions for type traits should be Mandates |
Yes |
3 |
|
2827(i) |
New |
21.3.5.4 [meta.unary.prop] |
is_trivially_constructible and non-trivial destructors |
No |
3 |
|
3697(i) |
New |
21.3.5.4 [meta.unary.prop] |
Preconditions of reference_constructs_from_temporary/reference_converts_from_temporary seem wrong |
Yes |
3 |
|
2496(i) |
New |
21.3.5.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.5.4 [meta.unary.prop] |
is_nothrow_constructible and destructors |
No |
3 |
|
2358(i) |
Open |
21.3.5.4 [meta.unary.prop] |
Apparently-bogus definition of is_empty type trait |
Yes |
3 |
|
2077(i) |
Open |
21.3.5.4 [meta.unary.prop] |
Further incomplete constraints for type traits |
No |
3 |
|
3486(i) |
LEWG |
21.3.5.4 [meta.unary.prop] |
is_constructible<T[], T...> may be misleading in C++20 |
No |
|
|
3400(i) |
New |
21.3.7 [meta.rel] |
Does is_nothrow_convertible consider destruction of the destination type? |
No |
3 |
|
4028(i) |
New |
21.3.7 [meta.rel] |
std::is_(nothrow_)convertible should be reworded to avoid dependence on the return statement |
Yes |
|
|
3174(i) |
New |
21.3.7 [meta.rel] |
Precondition on is_convertible is too strong |
Yes |
3 |
|
3205(i) |
New |
21.3.8.7 [meta.trans.other] |
decay_t in the new common_type fallback should be remove_cvref_t |
Yes |
3 |
|
4138(i) |
New |
21.3.11 [meta.const.eval] |
is_within_lifetime should mandate is_object |
Yes |
|
|
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 |
|
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 |
|
532(i) |
LEWG |
22.4.9 [tuple.rel] |
Tuple comparison |
Yes |
|
348 |
2990(i) |
Open |
22.5.3 [optional.optional] |
optional::value_type is not always a value type |
Yes |
3 |
|
3886(i) |
Tentatively Ready |
22.5.3.1 [optional.optional.general] |
Monad mo' problems |
Yes |
3 |
|
4141(i) |
Tentatively Ready |
22.5.3.1 [optional.optional.general] |
Improve prohibitions on "additional storage" |
Yes |
|
|
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 |
|
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 |
|
3613(i) |
New |
22.5.4 [optional.nullopt] |
Specify that nullopt_t is copyable |
Yes |
3 |
|
3627(i) |
New |
22.5.9 [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 |
|
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 |
|
2991(i) |
LEWG |
22.6.3.2 [variant.ctor] |
variant copy constructor missing noexcept(see below) |
Yes |
|
|
3991(i) |
New |
22.6.3.4 [variant.assign] |
variant 's move assignment should not be guaranteed to produce a valueless by exception state |
Yes |
3 |
|
3069(i) |
New |
22.6.3.4 [variant.assign] |
Move assigning variant 's subobject corrupts data |
Yes |
3 |
|
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 |
|
4026(i) |
New |
22.8.6.4 [expected.object.assign] |
Assignment operators of std::expected should propagate triviality |
Yes |
2 |
|
2348(i) |
Open |
22.9.2 [template.bitset] |
charT('1') is not the wide equivalent of '1' |
Yes |
3 |
|
4140(i) |
Tentatively Ready |
22.9.2.1 [template.bitset.general] |
Useless default constructors for bit reference types |
Yes |
|
|
3805(i) |
New |
22.10 [function.objects] |
Expression evaluating to a call wrapper is a prvalue, not an object |
No |
4 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
Issue |
Status |
Section |
Title |
Proposed Resolution |
Priority |
Duplicates |
2307(i) |
LEWG |
23 [containers] |
Should the Standard Library use explicit only when necessary? |
No |
2 |
|
2885(i) |
LEWG |
23 [containers] |
The relational operators of optional and variant completely reflect the semantics of the element
types — this is inconsistent with other types in the library |
No |
|
|
2884(i) |
LEWG |
23 [containers] |
Relational operators for containers should sfinae; if the underlying type is not comparable, neither should the container be |
No |
|
|
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 |
|
|
4147(i) |
Tentatively Ready |
23.2.4 [sequence.reqmts] |
Precondition on inplace_vector::emplace |
Yes |
|
|
3297(i) |
New |
23.2.4 [sequence.reqmts] |
Useless sequence container requirement |
Yes |
3 |
|
2705(i) |
New |
23.2.4 [sequence.reqmts] |
Questionable precondition on Sequence containers a.assign(n, t) |
Yes |
3 |
|
2206(i) |
Open |
23.2.4 [sequence.reqmts] |
Inaccuracy in initializer_list constructor requirements |
Yes |
3 |
|
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 |
|
3578(i) |
New |
23.2.7.1 [associative.reqmts.general] |
Iterator SCARYness in the context of associative container merging |
No |
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 |
|
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 |
|
4123(i) |
New |
23.3.5.4 [deque.modifiers] |
Container effects use "the assignment operator or move assignment operator" |
No |
3 |
|
3308(i) |
New |
23.3.5.4 [deque.modifiers] |
vector and deque iterator erase invalidates elements even when no change occurs |
Yes |
3 |
|
4135(i) |
Tentatively Ready |
23.3.7.7 [forward.list.erasure] |
The helper lambda of std::erase for list should specify return type as
bool |
Yes |
|
|
3758(i) |
New |
23.3.11.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.11.3 [vector.capacity] |
Conditional copy/move in std::vector |
Yes |
3 |
|
1102(i) |
Open |
23.3.11.3 [vector.capacity] |
std::vector 's reallocation policy still unclear |
Yes |
3 |
|
3638(i) |
New |
23.3.12 [vector.bool] |
vector<bool>::swap(reference, reference) is useless |
Yes |
3 |
|
1422(i) |
Open |
23.3.12 [vector.bool] |
vector<bool> iterators are not random access |
No |
3 |
|
4122(i) |
New |
23.3.14.1 [inplace.vector.overview] |
Ill-formed operator<=> can cause hard error when instantiating std::inplace_vector |
Yes |
2 |
|
4151(i) |
New |
23.3.14.5 [inplace.vector.modifiers] |
Precondition of inplace_vector::swap |
Yes |
2 |
|
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 |
|
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 |
|
|
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 |
|
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 |
|
4000(i) |
New |
23.6.8.7 [flat.map.modifiers] |
flat_map::insert_range 's Effects is not quite right |
Yes |
3 |
|
4048(i) |
New |
23.6.11 [flat.set] |
Inconsistent preconditions for transparent insertion of std::flat_map/std::flat_set |
Yes |
2 |
|
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 |
No |
2 |
|
3995(i) |
New |
23.7.3 [views.multidim] |
Issue with custom index conversion in <mdspan> |
No |
3 |
|
4020(i) |
New |
23.7.3.3.2 [mdspan.extents.expo] |
extents::index-cast weirdness |
Yes |
|
|
4021(i) |
New |
23.7.3.6.1 [mdspan.mdspan.overview] |
mdspan::is_always_meow() should be noexcept |
Yes |
|
|
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 |
|
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 |
|
4170(i) |
Tentatively Ready |
24.3.4.14 [iterator.concept.contiguous] |
contiguous_iterator should require to_address(I{}) |
Yes |
|
|
484(i) |
Open |
24.3.5.3 [input.iterators] |
Convertible to T |
No |
3 |
|
2962(i) |
Open |
24.3.5.3 [input.iterators] |
Iterators of Containers of move-only types do not model InputIterator |
Yes |
2 |
|
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) |
New |
24.3.6.3 [indirectcallable.indirectinvocable] |
P2609R3 breaks code that uses views::zip and get<T> |
No |
|
|
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 |
|
3439(i) |
New |
24.4.3 [iterator.operations] |
"Distance " template parameter is underspecified |
No |
3 |
|
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 |
|
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 |
|
4120(i) |
New |
24.5.4.2 [move.iterator] |
move_iterator should provide iterator_category only when it models
forward_iterator |
Yes |
3 |
|
4125(i) |
New |
24.5.4.2 [move.iterator] |
move_iterator 's default constructor should be constrained |
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 |
|
4131(i) |
New |
24.7 [iterator.range] |
Including <optional> 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 |
|
Issue |
Status |
Section |
Title |
Proposed Resolution |
Priority |
Duplicates |
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 |
|
4062(i) |
New |
25.3.12 [range.prim.empty] |
ranges::empty has no semantic requirements for forward_range s |
No |
|
|
3982(i) |
Tentatively NAD |
25.4.4 [range.view] |
is-derived-from-view-interface should require that T is derived from view_interface<T> |
Yes |
|
|
3896(i) |
New |
25.4.5 [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 |
|
|
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 |
|
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 |
|
|
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 |
|
3722(i) |
New |
25.5.7.2 [range.utility.conv.to] |
ranges::to reserve s the wrong size |
Yes |
4 |
|
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 |
|
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) |
New |
25.7.10.1 [range.take.overview] |
Should views::iota(0) | views::take(5) be views::iota(0, 5) ? |
Yes |
|
|
4009(i) |
New |
25.7.12.2 [range.drop.view] |
drop_view::begin const may have 𝒪(n) complexity |
Yes |
|
|
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 |
|
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 |
|
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) |
New |
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 |
|
|
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 |
|
|
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 |
|
4119(i) |
Tentatively Ready |
25.8.5 [coro.generator.promise] |
generator::promise_type::yield_value(ranges::elements_of<R, Alloc>) 's nested generator may be ill-formed |
Yes |
|
|
4057(i) |
New |
25.8.6 [coro.generator.iterator] |
generator::iterator 's operator* is not noexcept when it can be |
Yes |
3 |
|
4117(i) |
New |
25.8.6 [coro.generator.iterator] |
generator::iterator should provide iterator_concept |
Yes |
4 |
|
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 |
|
3049(i) |
Open |
26.2 [algorithms.requirements] |
Missing wording allowing algorithms to use copies of function objects as substitutes for their parameters |
Yes |
3 |
|
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 |
|
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 |
|
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 |
|
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 |
|
2985(i) |
LEWG |
26.7.10 [alg.reverse] |
std::reverse should be permitted to be vectorized |
Yes |
|
|
2267(i) |
New |
26.8.2.4 [partial.sort.copy] |
partial_sort_copy underspecified for ranges of two different types |
No |
3 |
|
4162(i) |
New |
26.8.3 [alg.nth.element] |
Worst time complexity of non-parallel versions of nth_element is underspecified |
Yes |
3 |
|
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 |
|
|
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 |
|
|
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 |
|
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 |
|
3064(i) |
New |
26.11 [specialized.algorithms] |
How do uninitialized memory algorithms obtain pointer without undefined behavior? |
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 |
|
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 |
|
|
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 |
|
|
3457(i) |
New |
27.3.3 [string.view.template] |
*this is not invalidated |
Yes |
3 |
|
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 |
|
3662(i) |
New |
27.4.3.7.2 [string.append] |
basic_string::append/assign(NTBS, pos, n) suboptimal |
Yes |
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 |
|
Issue |
Status |
Section |
Title |
Proposed Resolution |
Priority |
Duplicates |
3456(i) |
New |
28.2.3 [charconv.from.chars] |
Pattern used by std::from_chars is underspecified |
Yes |
3 |
|
3081(i) |
Open |
28.2.3 [charconv.from.chars] |
Floating point from_chars API does not distinguish between overflow and underflow |
Yes |
2 |
|
3082(i) |
Open |
28.2.3 [charconv.from.chars] |
from_chars specification regarding floating point rounding is inconsistent |
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 |
|
3337(i) |
New |
28.3.4.2.5.3 [locale.codecvt.virtuals] |
What is "is initialized" supposed to mean? |
No |
3 |
|
4163(i) |
New |
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 |
|
4084(i) |
Tentatively Ready |
28.3.4.3.3.3 [facet.num.put.virtuals] |
std::fixed ignores std::uppercase |
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 |
|
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 |
|
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) |
SG16 |
28.5.2.2 [format.string.std] |
Underspecified use of locale facets for locale-dependent std::format |
No |
3 |
|
4078(i) |
New |
28.5.5 [format.functions] |
What if arguments alias the output buffer in std::format_to ? |
No |
|
|
3993(i) |
New |
28.5.6.1 [formatter.requirements] |
The parse function of a BasicFormatter type needs to be constexpr |
Yes |
3 |
|
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 |
|
|
3706(i) |
New |
28.5.6.4 [format.formatter.spec] |
How does std::format work with character arrays of unknown bound? |
No |
3 |
|
4142(i) |
Tentatively Ready |
28.5.6.6 [format.parse.ctx] |
format_parse_context::check_dynamic_spec should require at least one type |
Yes |
|
|
4107(i) |
New |
28.5.7.4 [format.range.fmtmap] |
Map formatter may conflict with user-defined specializations of pair /tuple formatters |
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 |
|
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 |
|
|
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 |
|
|
4153(i) |
Tentatively Ready |
29.5.4.5 [rand.eng.philox] |
Fix extra "-1" for philox_engine::max() |
Yes |
|
|
3402(i) |
New |
29.5.9.3.4 [rand.dist.bern.negbin] |
Wording for negative_binomial_distribution is unclear as a consequence of LWG 2406 resolution |
No |
3 |
|
4052(i) |
New |
29.5.9.6.2 [rand.dist.samp.pconst] |
Bogus requirements for piecewise_linear_distribution |
No |
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) |
New |
29.9.3 [linalg.general] |
Specify behavior of [linalg] Hermitian algorithms on diagonal with nonzero imaginary part |
Yes |
|
|
4137(i) |
New |
29.9.14 [linalg.algs.blas2] |
Fix Mandates, Preconditions, and Complexity elements of [linalg] algorithms |
Yes |
|
|
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) |
New |
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 |
|
3678(i) |
New |
30.11.5.1 [time.zone.overview] |
Constructors of std::chrono::time_zone might be overly unspecified |
No |
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 |
|
4124(i) |
Tentatively Ready |
30.12 [time.format] |
Cannot format zoned_time with resolution coarser than seconds |
Yes |
|
|
4118(i) |
New |
30.12 [time.format] |
How should duration formatters format custom rep types? |
Yes |
3 |
|
4022(i) |
New |
30.12 [time.format] |
Ambiguity in the formatting of negative years with format specifier %C |
Yes |
|
|
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 |
|
3831(i) |
New |
30.12 [time.format] |
Two-digit formatting of negative year is ambiguous |
Yes |
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 |
|
3956(i) |
New |
30.13 [time.parse] |
chrono::parse uses from_stream as a customization point |
No |
3 |
|
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 |
No |
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 |
|
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 |
|
4088(i) |
Tentatively Ready |
31.7.6.3.5 [ostream.formatted.print] |
println ignores the locale imbued in std::ostream |
Yes |
|
|
4039(i) |
New |
31.7.6.3.5 [ostream.formatted.print] |
§[ostream.formatted.print]: Inappropriate usage of badbit in definition of
vprint_unicode /vprint_nonunicode |
Yes |
|
|
3501(i) |
New |
31.7.6.5 [ostream.manip] |
basic_syncbuf -related manipulators refer to some Allocator without defining it |
Yes |
3 |
|
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 |
|
4042(i) |
LEWG |
31.7.10 [print.fun] |
std::print should permit an efficient implementation |
Yes |
3 |
|
3309(i) |
New |
31.8 [string.streams] |
Is <ios> implicitly #include d by <sstream> , <fstream> etc.? |
No |
3 |
|
3992(i) |
New |
31.8.2.4 [stringbuf.members] |
basic_stringbuf::str()&& should enforce 𝒪(1) |
Yes |
|
|
3097(i) |
New |
31.8.2.5 [stringbuf.virtuals] |
basic_stringbuf seekoff effects trigger undefined behavior and have contradictory returns |
No |
3 |
|
2286(i) |
Open |
31.8.2.5 [stringbuf.virtuals] |
stringbuf::underflow() underspecified |
Yes |
4 |
|
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) |
SG16 |
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 |
|
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 |
|
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 |
|
1484(i) |
LEWG |
32.4.3 [thread.thread.class] |
Need a way to join a thread with a timeout |
No |
|
|
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 |
|
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 |
|
|
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 |
|
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 |
|
1458 |
4004(i) |
SG1 |
32.5.4 [atomics.order] |
The load and store operation in §[atomics.order] p1 is ambiguous |
No |
3 |
|
3941(i) |
SG1 |
32.5.4 [atomics.order] |
§[atomics.order] inadvertently prohibits widespread implementation techniques |
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 |
|
3508(i) |
Open |
32.5.7.1 [atomics.ref.generic.general] |
atomic_ref<cv T> is not well-specified |
No |
2 |
|
3409(i) |
New |
32.5.7.2 [atomics.ref.ops] |
Too lax description of atomic_ref<T>::required_alignment |
Yes |
3 |
|
4069(i) |
Open |
32.5.8 [atomics.types.generic] |
std::atomic<volatile T> should be ill-formed |
No |
2 |
|
4169(i) |
Tentatively Ready |
32.5.8.2 [atomics.types.operations] |
std::atomic<T> 's default constructor should be constrained |
Yes |
|
|
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 |
|
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 |
|
|
936(i) |
LEWG |
32.6.4 [thread.mutex.requirements] |
Mutex type overspecified |
No |
|
961 |
961(i) |
LEWG |
32.6.4 [thread.mutex.requirements] |
Various threading bugs #11 |
No |
|
936 |
1493(i) |
LEWG |
32.6.4 [thread.mutex.requirements] |
Add mutex , recursive_mutex , is_locked function |
No |
|
|
4172(i) |
New |
32.6.5.4.2 [thread.lock.unique.cons] |
unique_lock self-move-assignment is broken |
Yes |
|
|
3343(i) |
Open |
32.7.3 [thread.condition.nonmember] |
Ordering of calls to unlock() and notify_all() in Effects element of notify_all_at_thread_exit() should be reversed |
Yes |
3 |
|
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 |
|
3003(i) |
LEWG |
32.10.6 [futures.promise] |
<future> still has type-erased allocators in promise |
Yes |
2 |
|
2095(i) |
LEWG |
32.10.6 [futures.promise] |
promise and packaged_task missing constructors needed for uses-allocator construction |
Yes |
4 |
|
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 |
|
|
4158(i) |
New |
32.10.10.2 [futures.task.members] |
packaged_task::operator= should abandon its shared state |
Yes |
3 |
|