| 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 |
|
| 3669(i) |
New |
4.1.2 [intro.abstract] |
std::filesystem operations should be observable behaviour |
No |
3 |
|
| 2506(i) |
SG1 |
6.10.2 [intro.multithread] |
Underspecification of atomics |
No |
3 |
|
| 3105(i) |
New |
16 [library] |
T1 is convertible to T2 |
No |
3 |
|
| 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 |
|
| 3092(i) |
Open |
16.3.3.3.3 [bitmask.types] |
Unclear semantics of enum class bitmask types |
Yes |
3 |
|
| 3977(i) |
New |
16.3.3.3.3 [bitmask.types] |
constexpr and noexcept for operators for 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 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 |
|
| 2461(i) |
New |
16.4.4.6 [allocator.requirements] |
Interaction between allocators and container exception safety guarantees |
No |
3 |
|
| 3044(i) |
New |
16.4.4.6 [allocator.requirements] |
Strange specification of max_size() for an allocator |
Yes |
3 |
|
| 3157(i) |
New |
16.4.4.6 [allocator.requirements] |
Allocator destroy and fancy pointer operations must be non-throwing |
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 |
|
| 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 |
|
| 4128(i) |
New |
16.4.4.6.1 [allocator.requirements.general] |
Allocator requirements should not allow rebinding conversions to be explicit |
Yes |
3 |
|
| 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 |
|
| 3429(i) |
New |
16.4.5.11 [res.on.requirements] |
"models" should subsume like "satisfies" |
Yes |
3 |
|
| 4068(i) |
New |
16.4.5.11 [res.on.requirements] |
Terminology for objects whose types model a concept |
No |
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 |
|
| 4306(i) |
New |
16.4.6.5 [member.functions] |
Interaction between LWG 2259 and Constraints of 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 3931(i) |
New |
17.3.2 [version.syn] |
Too many paper bump __cpp_lib_ranges |
Yes |
3 |
|
| 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 |
|
| 2815(i) |
New |
17.5 [support.start.term] |
quick_exit can deadlock |
Yes |
3 |
|
| 3084(i) |
New |
17.5 [support.start.term] |
Termination in C++ is unclear |
No |
3 |
|
| 2737(i) |
New |
17.6.3.2 [new.delete.single] |
Consider relaxing object size restrictions for single-object allocation functions |
No |
3 |
|
| 3086(i) |
New |
17.6.3.2 [new.delete.single] |
Possible problem in §[new.delete.single] |
Yes |
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 |
|
| 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 |
|
| 3491(i) |
New |
17.12.6 [cmp.alg] |
What is a "decayed type"? |
No |
3 |
|
| 3932(i) |
New |
17.12.6 [cmp.alg] |
Expression-equivalence is sometimes unimplementable when passing prvalue expressions to comparison CPOs |
No |
3 |
|
| 3653(i) |
New |
17.13.2 [coroutine.syn] |
<coroutine> is freestanding, but uses std::hash which is not |
No |
3 |
|
| 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 |
|
| 3484(i) |
New |
17.15.7 [support.c.headers.other] |
Should <stddef.h> declare ::nullptr_t? |
Yes |
3 |
|
| 3799(i) |
New |
17.15.7 [support.c.headers.other] |
Should <math.h> provide 3-argument ::hypot overloads? |
No |
3 |
|
| 3895(i) |
New |
18.3 [concepts.syn] |
Various relation concepts are missing default values of the second template parameters |
Yes |
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 |
|
| 3608(i) |
New |
18.4.4 [concept.convertible] |
convertible_to and temporary-bound references |
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 |
|
| 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 |
|
| 3626(i) |
New |
19.6.4.1 [stacktrace.basic.overview] |
Is std::basic_stacktrace required to use contiguous storage? |
Yes |
3 |
|
| 4058(i) |
LEWG |
20.2.4 [pointer.conversion] |
std::to_address() should be SFINAE-friendly |
Yes |
3 |
|
| 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 |
3 |
|
| 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 |
|
| 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 |
|
| 3159(i) |
New |
20.3.1.3 [unique.ptr.single] |
§[unique.ptr.single] requirements on deleter may be too strict |
No |
3 |
|
| 3911(i) |
New |
20.3.1.3.5 [unique.ptr.single.observers] |
unique_ptr's operator* is missing a mandate |
Yes |
3 |
|
| 4324(i) |
New |
20.3.1.3.5 [unique.ptr.single.observers] |
unique_ptr<void>::operator* is not SFINAE-friendly |
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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 2077(i) |
Open |
21.3.6.4 [meta.unary.prop] |
Further incomplete constraints for 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 |
|
| 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 |
|
| 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 |
|
| 3929(i) |
New |
21.3.6.4 [meta.unary.prop] |
Preconditions for type traits should be Mandates |
Yes |
3 |
|
| 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 |
|
| 3174(i) |
New |
21.3.8 [meta.rel] |
Precondition on is_convertible is too strong |
Yes |
3 |
|
| 3400(i) |
New |
21.3.8 [meta.rel] |
Does is_nothrow_convertible consider destruction of the destination type? |
No |
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 |
|
| 4298(i) |
New |
21.4.12 [meta.reflection.extract] |
§[meta.reflection.extract] Malformed "F noexcept" type |
Yes |
3 |
|
| 2599(i) |
New |
22.2.6 [declval] |
Library incomplete type permission phrase is unclear |
No |
3 |
|
| 2289(i) |
Open |
22.3.2 [pairs.pair] |
constexpr guarantees of defaulted functions still insufficient |
No |
3 |
|
| 3342(i) |
New |
22.3.2 [pairs.pair] |
Library wording uses "initializes x with y", which is underspecified |
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 |
|
| 2528(i) |
New |
22.4.4.2 [tuple.cnstr] |
Order of std::tuple construction unspecified |
No |
3 |
|
| 3583(i) |
New |
22.4.4.2 [tuple.cnstr] |
Clarify if/when short circuiting applies to conditions in Constraints: elements |
No |
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 |
|
| 4040(i) |
New |
22.4.7 [tuple.helper] |
Contradictory specification of std::tuple_size |
No |
3 |
|
| 2472(i) |
New |
22.4.9 [tuple.rel] |
Heterogeneous comparisons in the standard library can result in ambiguities |
No |
3 |
|
| 3882(i) |
New |
22.4.9 [tuple.rel] |
tuple relational operators have confused friendships |
Yes |
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 |
|
| 3424(i) |
New |
22.5.3.7 [optional.observe] |
optional::value_or should never return a cv-qualified type |
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 |
|
| 3613(i) |
New |
22.5.5 [optional.nullopt] |
Specify that nullopt_t is copyable |
Yes |
3 |
|
| 2881(i) |
New |
22.6.3 [variant.variant] |
Adopt section III of P0308R0 |
No |
3 |
|
| 3069(i) |
New |
22.6.3.4 [variant.assign] |
Move assigning variant's subobject corrupts data |
Yes |
3 |
|
| 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 |
|
| 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 |
|
| 2348(i) |
Open |
22.9.2 [template.bitset] |
charT('1') is not the wide equivalent of '1' |
Yes |
3 |
|
| 4187(i) |
New |
22.9.2 [template.bitset] |
bitset::reference should be const-assignable |
Yes |
3 |
|
| 4007(i) |
New |
22.10.4 [func.require] |
Mystic prohibition of calling a volatile-qualified perfect forwarding call wrapper |
Yes |
3 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 3059(i) |
New |
23.2 [container.requirements] |
Wrong requirements for map-like associative container assignment? |
No |
3 |
|
| 1521(i) |
Open |
23.2.2 [container.requirements.general] |
Requirements on internal pointer representations in containers |
Yes |
3 |
|
| 2321(i) |
Open |
23.2.2 [container.requirements.general] |
Moving containers should (usually) be required to preserve iterators |
Yes |
3 |
|
| 2206(i) |
Open |
23.2.4 [sequence.reqmts] |
Inaccuracy in initializer_list constructor requirements |
Yes |
3 |
|
| 2705(i) |
New |
23.2.4 [sequence.reqmts] |
Questionable precondition on Sequence containers a.assign(n, t) |
Yes |
3 |
|
| 3297(i) |
New |
23.2.4 [sequence.reqmts] |
Useless sequence container requirement |
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 |
|
| 2215(i) |
Open |
23.2.7 [associative.reqmts] |
(unordered) associative container functors should be CopyConstructible |
Yes |
3 |
|
| 2227(i) |
Open |
23.2.7 [associative.reqmts] |
Stateful comparison objects in associative containers |
No |
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 |
|
| 3227(i) |
New |
23.2.7 [associative.reqmts] |
Ambiguity issue for extract in ordered and unordered associative containers |
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 |
|
| 4132(i) |
New |
23.2.7.1 [associative.reqmts.general] |
Throws specifications need to include boolean-testable operations |
Yes |
3 |
|
| 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 |
|
| 2823(i) |
Open |
23.3.3.1 [array.overview] |
std::array initialization is still not permissive enough |
Yes |
3 |
|
| 3219(i) |
New |
23.3.3.1 [array.overview] |
std::array overview container requirements are incorrect |
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 |
|
| 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 |
|
| 3308(i) |
New |
23.3.5.4 [deque.modifiers] |
vector and deque iterator erase invalidates elements even when no change occurs |
Yes |
3 |
|
| 4123(i) |
New |
23.3.5.4 [deque.modifiers] |
Container effects use "the assignment operator or move assignment operator" |
Yes |
3 |
|
| 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 |
|
| 1102(i) |
Open |
23.3.13.3 [vector.capacity] |
std::vector's reallocation policy still unclear |
Yes |
3 |
|
| 2158(i) |
Open |
23.3.13.3 [vector.capacity] |
Conditional copy/move in std::vector |
Yes |
3 |
|
| 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 |
|
| 1422(i) |
Open |
23.3.14 [vector.bool] |
vector<bool> iterators are not random access |
No |
3 |
|
| 3638(i) |
New |
23.3.14 [vector.bool] |
vector<bool>::swap(reference, reference) is useless |
Yes |
3 |
|
| 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 |
3 |
|
| 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 |
|
| 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 |
|
| 4352(i) |
New |
23.6.9.1 [flat.multimap.overview] |
"operations on flat_multimap are equivalent to those of flat_map" |
No |
3 |
|
| 4180(i) |
New |
23.6.12.5 [flat.multiset.modifiers] |
Inconsistent constraints on flat_foo::emplace |
Yes |
3 |
|
| 4397(i) |
New |
23.7.2.2.2 [span.cons] |
Improve span(R&& r) |
Yes |
3 |
|
| 3995(i) |
New |
23.7.3 [views.multidim] |
Issue with custom index conversion in <mdspan> |
No |
3 |
|
| 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 |
|
| 3952(i) |
New |
24.2 [iterator.synopsis] |
iter_common_reference_t does not conform to the definition of indirectly_readable |
Yes |
3 |
|
| 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 |
|
| 3615(i) |
New |
24.3.2.1 [incrementable.traits] |
The last specialization of incrementable_traits has wrong operand types |
Yes |
3 |
|
| 3838(i) |
New |
24.3.2.1 [incrementable.traits] |
The last specialization of incrementable_traits is under-constrained |
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 |
|
| 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 |
|
| 4270(i) |
New |
24.3.6.4 [projected] |
Diagnose misuse of std::projected::operator* |
Yes |
3 |
|
| 2931(i) |
Open |
24.4.3 [iterator.operations] |
Missed optimization opportunity with single-argument std::next |
No |
3 |
|
| 3197(i) |
New |
24.4.3 [iterator.operations] |
std::prev should not require BidirectionalIterator |
Yes |
3 |
|
| 3344(i) |
New |
24.4.3 [iterator.operations] |
advance(i, most-negative) and prev(i, most-negative) |
Yes |
3 |
|
| 3439(i) |
New |
24.4.3 [iterator.operations] |
"Distance" template parameter is underspecified |
No |
3 |
|
| 3623(i) |
New |
24.5.1.1 [reverse.iterators.general] |
Uses of std::reverse_iterator with containers should not require manually including <iterator> |
Yes |
3 |
|
| 2595(i) |
New |
24.5.1.2 [reverse.iterator] |
reverse_iterator::operator[]'s return type revisited |
Yes |
3 |
|
| 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 |
|
| 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 |
|
| 4237(i) |
New |
24.5.3.3 [const.iterators.iterator] |
The standard library iterator adaptor does not handle iterator_category correctly |
No |
3 |
|
| 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 |
|
| 3783(i) |
New |
24.5.5.1 [common.iterator] |
views::common may not be a range adaptor object |
Yes |
3 |
|
| 4092(i) |
New |
24.5.5.1 [common.iterator] |
The monotonic version of common_iterator::operator== is underconstrained |
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 |
|
| 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 |
|
| 3537(i) |
New |
24.7 [iterator.range] |
§[iterator.range] Missing noexcept for std::rbegin/rend for arrays and
initializer_list |
No |
3 |
|
| 4131(i) |
New |
24.7 [iterator.range] |
Including <optional> doesn't provide std::begin/end |
Yes |
3 |
|
| 4181(i) |
New |
24.7 [iterator.range] |
Some ranges have negative ssize |
No |
3 |
|
| 4385(i) |
New |
24.7 [iterator.range] |
Including <simd> 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 |
|
| 4062(i) |
New |
25.3.13 [range.prim.empty] |
ranges::empty has no semantic requirements for forward_ranges |
No |
3 |
|
| 4010(i) |
New |
25.5.4.3 [range.subrange.access] |
subrange::advance should be improved |
Yes |
3 |
|
| 3985(i) |
New |
25.5.7.2 [range.utility.conv.to] |
ranges::to should Mandates C not to be view |
Yes |
3 |
|
| 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 |
|
| 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 |
|
| 3846(i) |
New |
25.6.4.3 [range.iota.iterator] |
iota_view::iterator::operator- is overconstrained |
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 |
|
| 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 |
|
| 3829(i) |
New |
25.7.7.2 [range.as.rvalue.view] |
as_rvalue_view::end should improve non-common case |
Yes |
3 |
|
| 4214(i) |
New |
25.7.10.1 [range.take.overview] |
Missing Preconditions for take/drop adaptor |
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 |
|
| 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 |
|
| 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 |
|
| 4059(i) |
New |
25.7.15.3 [range.join.with.iterator] |
Leaky abstraction in join_with_view's iterator |
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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 3832(i) |
New |
25.7.23.3 [range.elements.iterator] |
Missing change for element_view::iterator in LWG 3798 |
Yes |
3 |
|
| 4114(i) |
New |
25.7.23.3 [range.elements.iterator] |
elements_view::iterator::operator* missing conditional noexcept specification |
Yes |
3 |
|
| 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 |
|
| 3731(i) |
New |
25.7.25.2 [range.zip.view] |
zip_view and adjacent_view are underconstrained |
Yes |
3 |
|
| 4254(i) |
New |
25.7.32.3 [range.stride.iterator] |
stride_view::iterator should provide operator-> |
Yes |
3 |
|
| 4210(i) |
New |
25.7.34.3 [range.cache.latest.iterator] |
Issue with cache_latest_view::iterator's reference type |
No |
3 |
|
| 4057(i) |
New |
25.8.6 [coro.generator.iterator] |
generator::iterator's operator* is not noexcept when it can be |
Yes |
3 |
|
| 1238(i) |
Open |
26 [algorithms] |
Defining algorithms taking iterator for range |
No |
3 |
|
| 2963(i) |
New |
26 [algorithms] |
Algorithms with underspecified iterator requirements |
No |
3 |
|
| 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 |
|
| 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 |
|
| 3969(i) |
New |
26.6.18 [alg.fold] |
std::ranges::fold_left_first_with_iter should be more ADL-proof |
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 |
|
| 2471(i) |
Open |
26.7.1 [alg.copy] |
copy_n's number of InputIterator increments unspecified |
No |
3 |
|
| 3089(i) |
New |
26.7.1 [alg.copy] |
copy_n should require non-overlapping ranges |
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 |
|
| 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 |
|
| 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 |
|
| 3487(i) |
New |
26.10 [numeric.ops] |
Missing precondition on input and output aliasing of [numeric.ops] |
No |
3 |
|
| 3463(i) |
New |
26.10.11 [transform.inclusive.scan] |
Incorrect requirements for transform_inclusive_scan without initial value |
Yes |
3 |
|
| 3063(i) |
New |
26.11 [specialized.algorithms] |
Parallel algorithms in <memory> are underspecified |
No |
3 |
|
| 3628(i) |
New |
26.11 [specialized.algorithms] |
"Effects: Equivalent to:" and uninitialized memory algorithms |
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 |
|
| 3942(i) |
New |
27.2.4 [char.traits.specializations] |
Inconsistent use of const char_type& in standard specializations of std::char_traits |
Yes |
3 |
|
| 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 |
|
| 3457(i) |
New |
27.3.3 [string.view.template] |
*this is not invalidated |
Yes |
3 |
|
| 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 |
|
| 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 |
|
| 2238(i) |
Open |
27.5 [c.strings] |
Problematic iterator-pair constructor of containers |
No |
3 |
|
| 4421(i) |
New |
28.2.2 [charconv.to.chars] |
Clarify the output encoding of to_chars for integers |
Yes |
3 |
|
| 3456(i) |
New |
28.2.3 [charconv.from.chars] |
Pattern used by std::from_chars is underspecified |
Yes |
3 |
|
| 3353(i) |
New |
28.3.3.1 [locale] |
locale's copy assignment operator should return locale& |
Yes |
3 |
|
| 3337(i) |
New |
28.3.4.2.5.3 [locale.codecvt.virtuals] |
What is "is initialized" supposed to mean? |
No |
3 |
|
| 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 |
|
| 3689(i) |
New |
28.3.4.3.2.3 [facet.num.get.virtuals] |
num_get overflow determination unclear and incorrect |
No |
3 |
|
| 2117(i) |
Open |
28.3.4.3.3.3 [facet.num.put.virtuals] |
ios_base manipulators should have showgrouping/noshowgrouping |
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 |
|
| 2703(i) |
New |
28.3.4.3.3.3 [facet.num.put.virtuals] |
No provision for fill-padding when boolalpha is set |
No |
3 |
|
| 4216(i) |
New |
28.3.4.3.3.3 [facet.num.put.virtuals] |
num_put::do_put and void pointers |
Yes |
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 |
|
| 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 |
|
| 4263(i) |
New |
28.5 [format] |
What should std::format_to etc. behave when the output is overlong? |
No |
3 |
|
| 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 |
|
| 4090(i) |
Open |
28.5.2.2 [format.string.std] |
Underspecified use of locale facets for locale-dependent std::format |
Yes |
3 |
|
| 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 |
|
| 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 |
|
| 4107(i) |
New |
28.5.7.4 [format.range.fmtmap] |
Map formatter may conflict with user-defined specializations of pair/tuple formatters |
Yes |
3 |
|
| 2490(i) |
New |
28.6 [re] |
<regex> needs lots of noexcept |
No |
3 |
|
| 2431(i) |
New |
28.6.2 [re.req] |
Missing regular expression traits requirements |
No |
3 |
|
| 3606(i) |
New |
28.6.2 [re.req] |
Missing regex_traits::locale_type 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 |
|
| 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 |
|
| 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 |
|
| 4161(i) |
New |
29.4 [complex.numbers] |
Some free functions don't automatically work for program-defined std::complex<NonFloatingPoint> |
No |
3 |
|
| 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 |
|
| 2847(i) |
New |
29.7.1 [cmath.syn] |
sin(float) should call sinf(float) |
No |
3 |
|
| 3093(i) |
New |
29.7.2 [c.math.abs] |
LWG 2294/2192 missed a std::abs overload |
No |
3 |
|
| 3172(i) |
New |
29.7.3 [c.math.hypot3] |
3-arg std::hypot is underspecified compared to the 2-arg overload |
Yes |
3 |
|
| 3066(i) |
New |
29.7.6 [sf.cmath] |
"report a domain error" in [sf.cmath]/1 is underspecified |
No |
3 |
|
| 4185(i) |
New |
29.9.7 [linalg.helpers] |
Ill-formed, no diagnostic required on runtime behavior |
No |
3 |
|
| 4409(i) |
New |
29.10 [simd] |
Constant expression ranges::size(r) Constraints and Mandates in [simd] |
Yes |
3 |
|
| 4408(i) |
LEWG |
29.10.7.3 [simd.subscr] |
Hardening simd::vec::operator[] |
Yes |
3 |
|
| 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 |
|
| 4386(i) |
New |
29.10.8.13 [simd.alg] |
std::simd::select(bool c, const T& a, const U& b) is underconstrained
|
Yes |
3 |
|
| 4402(i) |
New |
29.10.9.1 [simd.mask.overview] |
List-initialization of iterators in [simd.mask.overview] |
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 |
|
| 4193(i) |
New |
30.11.2 [time.zone.db] |
§[time.zone.db] the specification uses the undefined term "thread-safe" |
No |
3 |
|
| 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 |
|
| 3844(i) |
Open |
30.12 [time.format] |
Non-numeric formats for negative durations |
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 |
|
| 4022(i) |
New |
30.12 [time.format] |
Ambiguity in the formatting of negative years with format specifier %C |
Yes |
3 |
|
| 4118(i) |
New |
30.12 [time.format] |
How should duration formatters format custom rep types? |
Yes |
3 |
|
| 4400(i) |
New |
30.12 [time.format] |
enable_nonlocking_formatter_optimization for durations with custom rep |
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 |
|
| 3962(i) |
New |
30.13 [time.parse] |
What is the "decimal precision of the input"? |
Yes |
3 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 3309(i) |
New |
31.8 [string.streams] |
Is <ios> implicitly #included by <sstream>, <fstream> etc.? |
No |
3 |
|
| 3097(i) |
New |
31.8.2.5 [stringbuf.virtuals] |
basic_stringbuf seekoff effects trigger undefined behavior and have contradictory returns |
No |
3 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 3941(i) |
Open |
32.5.4 [atomics.order] |
§[atomics.order] inadvertently prohibits widespread implementation techniques |
No |
3 |
|
| 4004(i) |
SG1 |
32.5.4 [atomics.order] |
The load and store operation in §[atomics.order] p1 is ambiguous |
No |
3 |
|
| 4174(i) |
SG1 |
32.5.4 [atomics.order] |
How does [atomics.order] p3 apply when then modification is an initialization? |
No |
3 |
|
| 3263(i) |
New |
32.5.6 [atomics.wait] |
Atomic waiting function calls should only be unblocked once |
Yes |
3 |
|
| 3409(i) |
New |
32.5.7.2 [atomics.ref.ops] |
Too lax description of atomic_ref<T>::required_alignment |
Yes |
3 |
|
| 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 |
|
| 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 |
|
| 3582(i) |
New |
32.10.9 [futures.async] |
Unclear where std::async exceptions are handled |
Yes |
3 |
|
| 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 |
|
| 4353(i) |
New |
33 [exec] |
Uses of MANDATE-NOTHROW in CPOs should not enclose CPO argument sub-expressions |
No |
3 |
|
| 4327(i) |
New |
33.6 [exec.sched] |
Equal schedulers should be required to have same behaviour |
No |
3 |
|
| 4329(i) |
LEWG |
33.13.3 [exec.affine.on] |
Customising affine_on for other algorithms |
No |
3 |
|
| 2507(i) |
New |
99 [depr.locale.stdcvt] |
codecvt_mode should be a bitmask type |
No |
3 |
|
| 3840(i) |
Open |
D.22.1 [depr.fs.path.factory] |
filesystem::u8path should be undeprecated |
Yes |
3 |
|
| 3812(i) |
New |
6.1.2.6 [fund.ts.v3::propagate_const.const_observers] |
[fund.ts.v3] Incorrect constraint on propagate_const conversion function |
Yes |
3 |
|
| 3167(i) |
Open |
8.2 [fund.ts.v3::memory.observer.ptr] |
[fund.ts.v3] Does observer_ptr support function types? |
No |
3 |
|
| 3357(i) |
Open |
99 [fund.ts.v3::rand.util.randint] |
[fund.ts.v3] default_random_engine is overspecified for per-thread engine |
Yes |
3 |
|
| 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 |
|
| 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 |
|
| 3073(i) |
New |
17 [networking.ts::buffer.stream] |
[networking.ts] (async_)read and (async_)write
don't support DynamicBuffer lvalues |
Yes |
3 |
|
| 3445(i) |
LEWG |
19.2.1 [networking.ts::socket.iostream.cons] |
[networking.ts] net::basic_socket_istream::connect should be constrained |
Yes |
3 |
|
| Issue |
Status |
Section |
Title |
Proposed Resolution |
Priority |
Duplicates |
| 2949(i) |
New |
16 [library] |
Unclear complexity requirements: space vs. time |
No |
4 |
|
| 3267(i) |
New |
16.4.4.6 [allocator.requirements] |
Rebound allocators and is_always_equal |
Yes |
4 |
|
| 4258(i) |
New |
16.4.4.6.1 [allocator.requirements.general] |
Size type mismatch in constraints involving Cpp17Allocator |
No |
4 |
|
| 3926(i) |
New |
16.4.5.2.1 [namespace.std] |
Which namespace std is the mentioned one? |
Yes |
4 |
|
| 4047(i) |
New |
16.4.5.2.1 [namespace.std] |
Explicitly specifying template arguments for std::swap should not be supported |
No |
4 |
|
| 2248(i) |
New |
17.3.5 [numeric.limits] |
numeric_limits::is_iec559 misnamed |
No |
4 |
|
| 2493(i) |
New |
17.11 [support.initlist] |
initializer_list supports incomplete classes |
No |
4 |
|
| 3883(i) |
New |
17.15.7 [support.c.headers.other] |
§[support.c.headers.other] Ambiguity in the requirements for includes |
Yes |
4 |
|
| 4041(i) |
New |
18.4.9 [concept.swappable] |
The requirements on literal type in [concept.swappable] should be removed |
Yes |
4 |
|
| 3454(i) |
Open |
20.2.3 [pointer.traits] |
pointer_traits::pointer_to should be constexpr |
Yes |
4 |
|
| 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 |
|
| 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 |
|
| 3681(i) |
New |
20.5.1 [mem.res.syn] |
Further considerations on LWG 3679 (using pmr::vector without including <memory_resource>) |
No |
4 |
|
| 3486(i) |
LEWG |
21.3.6.4 [meta.unary.prop] |
is_constructible<T[], T...> may be misleading in C++20 |
No |
4 |
|
| 3902(i) |
New |
22.2.6 [declval] |
Return type of std::declval<cv void> should be (cv-unqualified) void |
Yes |
4 |
|
| 3728(i) |
New |
22.4.9 [tuple.rel] |
Can't make neither head nor tail of the description of operator<=>(tuple, tuple) |
Yes |
4 |
|
| 4367(i) |
New |
22.5.4.7 [optional.ref.monadic] |
Improve optional<T&>::or_else |
Yes |
4 |
|
| 3805(i) |
New |
22.10 [function.objects] |
Expression evaluating to a call wrapper is a prvalue, not an object |
No |
4 |
|
| 3979(i) |
New |
22.10.13 [func.not.fn] |
Should we reject std::bind_front<42>() and its friends? |
Yes |
4 |
|
| 4365(i) |
LEWG |
22.10.18.3 [func.search.bm] |
boyer_moore_searcher and boyer_moore_horspool_searcher should be constexpr-friendly |
Yes |
4 |
|
| 3968(i) |
New |
22.11.8 [bit.endian] |
std::endian::native value should be more specific about object representations |
Yes |
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 |
|
| 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 |
|
| 2269(i) |
New |
23.2.2 [container.requirements.general] |
Container iterators and argument-dependent lookup |
No |
4 |
|
| 3976(i) |
New |
23.2.2.5 [container.alloc.reqmts] |
What does it mean for a type to be "allocator aware"? |
No |
4 |
|
| 1213(i) |
Open |
24.3 [iterator.requirements] |
Meaning of valid and singular iterator underspecified |
No |
4 |
|
| 4055(i) |
New |
24.4.3 [iterator.operations] |
§[iterator.operations] std::distance is missing a precondition |
Yes |
4 |
|
| 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 |
|
| 4104(i) |
New |
24.5.3 [const.iterators] |
basic_const_iterator<volatile int*> is not a contiguous_iterator |
No |
4 |
|
| 4115(i) |
New |
24.5.4.6 [move.iter.elem] |
move_iterator::operator* should have conditional noexcept specification |
Yes |
4 |
|
| 3107(i) |
New |
24.6.4 [istreambuf.iterator] |
istreambuf_iterator has public exposition-only member |
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 |
|
| 4307(i) |
New |
25.2 [ranges.syn] |
Make good use of sized-random-access-range and bidirectional-common
in <ranges> |
Yes |
4 |
|
| 3896(i) |
New |
25.4.6 [range.refinements] |
The definition of viewable_range is not quite right |
Yes |
4 |
|
| 4183(i) |
New |
25.5.4.1 [range.subrange.general] |
subrange should provide data() |
Yes |
4 |
|
| 3722(i) |
New |
25.5.7.2 [range.utility.conv.to] |
ranges::to reserves 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 |
|
| 4066(i) |
New |
25.5.7.2 [range.utility.conv.to] |
ranges::to should reserve when sized_sentinel_for is satisfied |
Yes |
4 |
|
| 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 |
|
| 3855(i) |
New |
25.7.16.2 [range.lazy.split.view] |
tiny-range is not quite right |
Yes |
4 |
|
| 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 |
|
| 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 |
|
| 3864(i) |
New |
25.7.25 [range.zip] |
zip over range of reference to an abstract type |
No |
4 |
|
| 4117(i) |
New |
25.8.6 [coro.generator.iterator] |
generator::iterator should provide iterator_concept |
Yes |
4 |
|
| 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 |
|
| 3868(i) |
LEWG |
26.7.5 [alg.replace] |
Constrained algorithms should not require output_iterator |
Yes |
4 |
|
| 2973(i) |
LEWG |
26.8.6 [alg.merge] |
inplace_merge exact comparison count complexity prohibits useful real-world optimizations |
Yes |
4 |
|
| 4034(i) |
New |
26.8.9 [alg.min.max] |
Clarify specification of std::min and std::max |
Yes |
4 |
|
| 2513(i) |
New |
27.1 [strings.general] |
Missing requirements for basic_string::value_type |
No |
4 |
|
| 3694(i) |
New |
27.2.2 [char.traits.require] |
Should traits_type::length be customizable? |
No |
4 |
|
| 4152(i) |
New |
27.2.2 [char.traits.require] |
The primary template of std::char_traits is totally underspecified |
Yes |
4 |
|
| 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 |
|
| 4410(i) |
New |
27.3.3.2 [string.view.cons] |
basic_string_view(It begin, End end) is underconstrained |
Yes |
4 |
|
| 4378(i) |
New |
27.4.3.6 [string.access] |
Inconsistency between std::basic_string's data() and operator[] specification |
Yes |
4 |
|
| 2237(i) |
New |
27.5 [c.strings] |
<cuchar> macros |
No |
4 |
|
| 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 |
|
| 2512(i) |
Open |
28.3.4.6.2.3 [locale.time.get.virtuals] |
Y2K bites; what is an "unambiguous year identifier"? |
No |
4 |
|
| 3997(i) |
New |
28.5.1 [format.syn] |
std::formatter specializations should be consistently restricted to supported character types |
No |
4 |
|
| 4078(i) |
New |
28.5.5 [format.functions] |
What if arguments alias the output buffer in std::format_to? |
No |
4 |
|
| 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 |
|
| 3630(i) |
New |
28.6.7.2 [re.regex.construct] |
Inconsistent basic_regex construction and assignment from iterator range |
No |
4 |
|
| 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 |
|
| 3933(i) |
New |
29.4.3 [complex] |
P1467R9 accidentally changed the signatures of certain constructors of std::complex |
Yes |
4 |
|
| 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 |
|
| 2923(i) |
New |
29.7.1 [cmath.syn] |
noexcept is inconsistently applied across headers which import components of the C standard library |
No |
4 |
|
| 4390(i) |
LEWG |
29.10.7.2 [simd.ctor] |
simd::basic_vec(U&&) default template parameter |
Yes |
4 |
|
| 2592(i) |
New |
30.2 [time.syn] |
Require that chrono::duration_casts from smaller durations to larger durations do not overflow |
Yes |
4 |
|
| 3678(i) |
New |
30.11.5.1 [time.zone.overview] |
Constructors of std::chrono::time_zone might be overly unspecified |
Yes |
4 |
|
| 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 |
|
| 2214(i) |
Open |
31.5.4.2 [basic.ios.cons] |
Clarify basic_ios::init call restrictions |
Yes |
4 |
|
| 2342(i) |
New |
31.7.6.2 [ostream] |
User conversion to wchar_t const* or to wchar_t not invoked for operator<< |
Yes |
4 |
|
| 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 |
|
| 4364(i) |
New |
31.7.7 [std.manip] |
SFINAE-friendliness on operator<< and operator>> for unspecified I/O manipulators |
No |
4 |
|
| 2286(i) |
Open |
31.8.2.5 [stringbuf.virtuals] |
stringbuf::underflow() underspecified |
Yes |
4 |
|
| 4279(i) |
New |
31.12.13.2 [fs.op.absolute] |
§[fs.op.absolute] Non-normative encouragement should be Recommended practice |
No |
4 |
|
| 1484(i) |
LEWG |
32.4.3 [thread.thread.class] |
Need a way to join a thread with a timeout |
No |
4 |
|
| 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 |
|
| 2236(i) |
SG1 |
32.5.2 [atomics.syn] |
kill_dependency unconditionally noexcept |
No |
4 |
|
| 1459(i) |
LEWG |
32.5.4 [atomics.order] |
Overlapping evaluations are allowed |
No |
4 |
1458 |
| 2265(i) |
Open |
32.5.4 [atomics.order] |
29.3p9 appears to rule out some acceptable executions |
No |
4 |
|
| 3268(i) |
New |
32.5.4 [atomics.order] |
memory_order::memory_order_foo broken in C++20 |
Yes |
4 |
|
| 3999(i) |
New |
32.5.4 [atomics.order] |
P0439R0 changed the value category of memory order constants |
Yes |
4 |
|
| 4177(i) |
SG1 |
32.5.4 [atomics.order] |
§[atomics.order] p8 "circularly depend on their own computation" is unclear for loop |
No |
4 |
|
| 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 |
|
| 2202(i) |
Deferred |
32.10.9 [futures.async] |
Missing allocator support by async |
No |
4 |
|
| 4326(i) |
New |
33.5.1 [exec.fwd.env] |
Standard defined queries can't customize forwarding_query_t by inheriting from it |
Yes |
4 |
|
| 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 |
|
| 2478(i) |
New |
99 [depr.conversions.string] |
Unclear how wstring_convert uses cvtstate |
No |
4 |
|
| 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 |
|
| 2481(i) |
New |
99 [depr.conversions.string] |
wstring_convert should be more precise regarding "byte-error string" etc. |
No |
4 |
|
| 3095(i) |
New |
99 [depr.strstreambuf.virtuals] |
strstreambuf refers to nonexistent member of fpos, fpos::offset |
Yes |
4 |
|
| 3109(i) |
New |
99 [depr.strstreambuf] |
strstreambuf is copyable |
No |
4 |
|
| 2533(i) |
Open |
99 [concurr.ts::futures.unique.future] |
[concurr.ts] Constrain threads where future::then can run a continuation |
No |
4 |
|
| 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 |
|
| 3114(i) |
LEWG |
16 [networking.ts::buffer] |
[networking.ts] Permit efficient composition when using DynamicBuffer |
Yes |
4 |
|