C++ Standard Library Backport
invoke
mem_fn
not_fn
bool_constant
endian
is_aggregate
is_null_pointer
remove_cvref
type_identity
void_t
- Invocable type traits
std::is_invocable
std::is_invocable_r
std::is_nothrow_invocable
std::is_nothrow_invocable_r
- Logical operator type traits
conjunction
disjunction
negation
- Metafunction aliases:
*_t
as_const
exchange
integral_constant::operator()
- Compile-time integer sequences
integer_sequence
index_sequence
make_integer_sequence
make_index_sequence
index_sequence_for
- N3302: Constexpr Library Additions: complex, v2
- N3346: Terminology for Container Element Requirements
- N3421: Making Operator Functors
greater<>
- N3462:
std::result_of
and SFINAE - N3469: Constexpr Library Additions: chrono, v3
- N3470: Constexpr Library Additions: containers, v2
- N3471: Constexpr Library Additions: utilities, v3
- N3545: An Incremental Improvement to
integral_constant
- N3642: User-defined Literals
- N3644: Null Forward Iterators
- N3654: Quoted Strings
- N3655: TransformationTraits Redux (excluding part 4)
- N3656:
make_unique
- N3657: Adding heterogeneous comparison lookup to associative containers
- N3658: Compile-time integer sequences
- N3659: Shared Locking in C++
- N3668:
std::exchange()
utility function - N3669: Fixing
constexpr
member functions withoutconst
- N3670: Addressing Tuples by Type
- N3671: Making non-modifying sequence operations more robust
- N3779: User-defined Literals for
std::complex
- N3789: Constexpr Library Additions: functional
- N3887: Consistent Metafunction Aliases
- N3891: A proposal to rename
shared_mutex
toshared_timed_mutex
- N3924: Discouraging
rand()
in C++14
- LWG1214: Insufficient/inconsistent key immutability requirements for associative containers
- LWG1450: Contradiction in
regex_constants
- LWG2003: String exception inconsistency in erase.
- LWG2005:
unordered_map::insert(T&&)
protection should apply tomap
too - LWG2009: Reporting out-of-bound values on numeric string conversions
- LWG2010:
is_*
traits for binding operations can't be meaningfully specialized - LWG2011: Unexpected output required of strings
- LWG2013: Do library implementers have the freedom to add
constexpr
? - LWG2015: Incorrect pre-conditions for some type traits
- LWG2018:
regex_traits::isctype
Returns clause is wrong - LWG2021: Further incorrect usages of
result_of
- LWG2028:
messages_base::catalog
overspecified - LWG2033: Preconditions of
reserve
,shrink_to_fit
, andresize
functions - LWG2039: Issues with
std::reverse
andstd::copy_if
- LWG2044: No definition of "Stable" for copy algorithms
- LWG2045:
forward_list::merge
andforward_list::splice_after
with unequal allocators - LWG2047: Incorrect "mixed" move-assignment semantics of
unique_ptr
- LWG2048: Unnecessary
mem_fn
overloads - LWG2049:
is_destructible
is underspecified - LWG2050: Unordered associative containers do not use
allocator_traits
to define member types - LWG2053: Errors in
regex
bitmask types - LWG2056:
future_errc
enums start with value 0 (invalid value forbroken_promise
) - LWG2058:
valarray
andbegin
/end
- LWG2061:
make_move_iterator
and arrays - LWG2064: More
noexcept
issues inbasic_string
- LWG2065: Minimal allocator interface
- LWG2067:
packaged_task
should have deleted copy c'tor with const parameter - LWG2069: Inconsistent exception spec for
basic_string
move constructor - LWG2071:
std::valarray
move-assignment - LWG2074: Off by one error in
std::reverse_copy
- LWG2075: Progress guarantees, lock-free property, and scheduling assumptions
- LWG2078: Throw specification of
async()
incomplete - LWG2080: Specify when
once_flag
becomes invalid - LWG2081: Allocator requirements should include
CopyConstructible
- LWG2083:
const
-qualification onweak_ptr::owner_before
- LWG2085: Wrong description of effect 1 of
basic_istream::ignore
- LWG2086: Overly generic type support for math functions
- LWG2087:
iostream_category()
andnoexcept
- LWG2091: Misplaced effect in
m.try_lock_for()
- LWG2092: Vague Wording for
condition_variable_any
- LWG2093: Throws clause of
condition_variable::wait
with predicate - LWG2094:
duration
conversion overflow shouldn't participate in overload resolution - LWG2096: Incorrect constraints of
future::get
in regard toMoveAssignable
- LWG2097:
packaged_task
constructors should be constrained - LWG2098:
promise
throws clauses - LWG2099: Unnecessary constraints of
va_start()
usage - LWG2100: Timed waiting functions cannot timeout if
launch::async
policy used - LWG2102: Why is
std::launch
an implementation-defined type? - LWG2103:
std::allocator_traits<std::allocator<T>>::propagate_on_container_move_assignment
- LWG2104:
unique_lock
move-assignment should not benoexcept
- LWG2105: Inconsistent requirements on
const_iterator
'svalue_type
- LWG2109: Incorrect requirements for
hash
specializations - LWG2110:
remove
can't swap but note says it might - LWG2112: User-defined classes that cannot be derived from
- LWG2120: What should
async
do if neitherasync
nordeferred
is set in policy? - LWG2122:
merge()
stability for lists versus forward lists - LWG2123:
merge()
allocator requirements for lists versus forward lists - LWG2128: Absence of global functions
cbegin
/cend
- LWG2130: missing ordering constraints for fences
- LWG2132:
std::function
ambiguity - LWG2135: Unclear requirement for exceptions thrown in
condition_variable::wait()
- LWG2138:
atomic_flag::clear
ordering constraints - LWG2140:
notify_all_at_thread_exit
synchronization - LWG2141:
common_type
trait produces reference types - LWG2142:
packaged_task::operator()
synchronization too broad? - LWG2143:
ios_base::xalloc
should be thread-safe - LWG2144: Missing
noexcept
specification intype_index
- LWG2145:
error_category
default constructor - LWG2147: Unclear hint type in
Allocator
'sallocate
function - LWG2148: Hashing enums should be supported directly by
std::hash
- LWG2149: Concerns about 20.8/5
- LWG2150: Unclear specification of
find_end
- LWG2159:
atomic_flag
initialization - LWG2162:
allocator_traits::max_size
missingnoexcept
- LWG2163:
nth_element
requires inconsistent post-conditions - LWG2169: Missing
reset()
requirements inunique_ptr
specialization - LWG2172: Does
atomic_compare_exchange_*
acceptv == nullptr
arguments? - LWG2174:
wstring_convert::converted()
should benoexcept
- LWG2175:
string_convert
andwbuffer_convert
validity - LWG2176: Special members for
wstring_convert
andwbuffer_convert
- LWG2177: Requirements on
Copy
/MoveInsertable
- LWG2180: Exceptions from
std::seed_seq
operations - LWG2182:
Container::[const_]reference
types are misleadingly specified - LWG2185: Missing throws clause for
future
/shared_future::wait_for
/wait_until
- LWG2186: Incomplete action on
async
/launch::deferred
- LWG2187:
vector<bool>
is missingemplace
andemplace_back
member functions - LWG2188: Reverse iterator does not fully support targets that overload
operator&
- LWG2190: ordering of condition variable operations, reflects
Posix
discussion - LWG2193: Default constructors for standard library containers are explicit
- LWG2194: Impossible container requirements for adaptor types
- LWG2196: Specification of
is_*[copy/move]_[constructible/assignable]
unclear for non-referencable types - LWG2197: Specification of
is_[un]signed
unclear for non-arithmetic types - LWG2200: Data race avoidance for all containers, not only for sequences
- LWG2203:
scoped_allocator_adaptor
uses wrong argument types for piecewise construction - LWG2205: Problematic postconditions of
regex_match
andregex_search
- LWG2207:
basic_string::at
should not have a Requires clause - LWG2209:
assign()
overspecified for sequence containers - LWG2210: Missing allocator-extended constructor for allocator-aware containers
- LWG2211: Replace ambiguous use of "Allocator" in container requirements
- LWG2213: Return value of
std::regex_replace
- LWG2222: Inconsistency in description of
forward_list::splice_after
single-element overload - LWG2225: Unrealistic header inclusion checks required
- LWG2229: Standard code conversion facets underspecified
- LWG2231: DR 704 removes complexity guarantee for
clear()
- LWG2235: Undefined behavior without proper requirements on
basic_string
constructors - LWG2240: Probable misuse of term "function scope" in [thread.condition]
- LWG2246:
unique_ptr
assignment effects w.r.t. deleter - LWG2247: Type traits and
std::nullptr_t
- LWG2252: Strong guarantee on
vector::push_back()
still broken with C++11? - LWG2257: Simplify container requirements with the new algorithms
- LWG2258:
a.erase(q1, q2)
unable to directly returnq2
- LWG2263: Comparing iterators and allocator pointers with different const-character
- LWG2268: Setting a default argument in the declaration of a member function assign of
std::basic_string
- LWG2271:
regex_traits::lookup_classname
specification unclear - LWG2272: quoted should use
char_traits::eq
for character comparison - LWG2275: Why is
forward_as_tuple
notconstexpr
? - LWG2278: User-defined literals for Standard Library types
- LWG2280:
begin
/end
for arrays should beconstexpr
andnoexcept
- LWG2284: Inconsistency in
allocator_traits::max_size
- LWG2285:
make_reverse_iterator
- LWG2288: Inconsistent requirements for shared mutexes
- LWG2291:
std::hash
is vulnerable to collision DoS attack - LWG2293: Wrong facet used by
num_put::do_put
- LWG2298:
is_nothrow_constructible
is always false because ofcreate<>
- LWG2299: Effects of inaccessible
key_compare::is_transparent
type are not clear - LWG2300: Redundant sections for
map
andmultimap
members should be removed - LWG2301: Why is
std::tie
not constexpr? - LWG2304: Complexity of count in unordered associative containers
- LWG2306:
match_results::reference
should bevalue_type&
, not constvalue_type&
- LWG2308: Clarify container destructor requirements w.r.t.
std::array
- LWG2313:
tuple_size
should always derive fromintegral_constant
- LWG2314:
apply()
should returndecltype(auto)
and usedecay_t
beforetuple_size
- LWG2315:
weak_ptr
should be movable - LWG2316:
weak_ptr::lock()
should be atomic - LWG2317: The type property queries should be
UnaryTypeTraits
returningsize_t
- LWG2320:
select_on_container_copy_construction()
takes allocators, not containers - LWG2322:
Associative(initializer_list, stuff)
constructors are underspecified - LWG2323:
vector::resize(n, t)
's specification should be simplified - LWG2324: Insert
iterator
constructors should useaddressof()
- LWG2329:
regex_match()
/regex_search()
withmatch_results
should forbid temporary strings - LWG2330:
regex("meow", regex::icase)
is technically forbidden but should be permitted - LWG2332:
regex_iterator
/regex_token_iterator
should forbid temporary regexes - LWG2339: Wording issue in
nth_element
- LWG2341: Inconsistency between
basic_ostream::seekp(pos)
andbasic_ostream::seekp(off, dir)
- LWG2344:
quoted()
's interaction with padding is unclear - LWG2346:
integral_constant
's member functions should be markednoexcept
- LWG2350:
min
,max
, andminmax
should beconstexpr
- LWG2356: Stability of erasure in unordered associative containers
- LWG2357: Remaining
Assignable
requirement - LWG2359: How does
regex_constants::nosubs
affectbasic_regex::mark_count()
? - LWG2360:
reverse_iterator::operator*()
is unimplementable - GB9: Remove
gets
from C++14
- N3911: TransformationTrait Alias
void_t
. - N4089: Safe conversions in
unique_ptr<T[]>
. - N4169: A proposal to add
invoke
function template - N4190: Removing
auto_ptr
,random_shuffle()
, And Old Stuff. - N4258: Cleaning-up noexcept in the Library.
- N4259: Wording for
std::uncaught_exceptions
- N4277:
TriviallyCopyable
reference_wrapper
. - N4279: Improved insertion interface for unique-key maps.
- N4280: Non-member
size()
and more - N4284: Contiguous Iterators.
- N4285: Cleanup for exception-specification and throw-expression.
- N4387: improving
pair
andtuple
- N4389:
bool_constant
- N4508:
shared_mutex
for C++17 - N4366: LWG 2228 missing SFINAE rule
- N4510: Minimal incomplete type support for standard containers, revision 4
- P0004: Remove Deprecated iostreams aliases.
- P0006: Adopt Type Traits Variable Templates for C++17.
- P0092: Polishing
<chrono>
- P0007: Constant View: A proposal for a
std::as_const
helper function template. - P0156: Variadic
lock_guard
(rev 3). Reverted in Kona - P0074: Making
std::owner_less
more flexible - P0013: Logical Operator Type Traits
- P0024: The Parallelism TS Should be Standardized
- P0226: Mathematical Special Functions for C++17
- P0220: Adopt Library Fundamentals V1 TS Components for C++17
- P0218: Adopt the File System TS for C++17
- P0033: Re-enabling
shared_from_this
- P0005: Adopt
not_fn
from Library Fundamentals 2 for C++17 - P0152:
constexpr atomic::is_always_lock_free
- P0185: Adding [nothrow-]swappable traits
- P0253: Fixing a design mistake in the searchers interface
- P0025: An algorithm to "clamp" a value between a pair of boundary values
- P0154:
constexpr std::hardware_{constructive,destructive}_interference_size
- P0030: Proposal to Introduce a 3-Argument Overload to
std::hypot
- P0031: A Proposal to Add Constexpr Modifiers to
reverse_iterator
,move_iterator
,array
andRange
Access - P0272: Give
std::string
a non-const.data()
member function - P0077:
is_callable
, the missingINVOKE
related trait - P0032: Homogeneous interface for
variant
,any
andoptional
- P0040: Extending memory management tools
- P0063: C++17 should refer to C11 instead of C99
- P0067: Elementary string conversions (P0067R5)
- P0083: Splicing Maps and Sets
- P0084: Emplace Return Type
- P0088: Variant: a type-safe
union
for C++17 - P0137: Core Issue 1776: Replacement of class objects containing reference members
- P0163:
shared_ptr::weak_type
- P0174: Deprecating Vestigial Library Parts in C++17
- P0175: Synopses for the C library
- P0180: Reserve a New Library Namespace for Future Standardization
- P0209:
make_from_tuple
:apply
for construction - P0219: Relative Paths for Filesystem
- P0254: Integrating
std::string_view
andstd::string
- P0258:
has_unique_object_representations
- P0295: Adopt Selected Library Fundamentals V2 Components for C++17
- P0302: Removing Allocator Support in
std::function
- P0307: Making Optional Greater Equal Again
- P0336: Better Names for Parallel Execution Policies in C++17
- P0337: Delete
operator=
forpolymorphic_allocator
- P0346: A
<random>
Nomenclature Tweak - P0358: Fixes for
not_fn
- P0371: Temporarily discourage
memory_order_consume
- P0392: Adapting
string_view
by filesystem paths - P0393: Making Variant Greater Equal
- P0394: Hotel Parallelifornia:
terminate()
for Parallel Algorithms Exception Handling - P0003: Removing Deprecated Exception Specifications from C++17
- P0067: Elementary string conversions, revision 5
- P0403: Literal suffixes for
basic_string_view
- P0414: Merging
shared_ptr
changes from Library Fundamentals to C++17 - P0418: Fail or succeed: there is no atomic lattice
- P0426: Constexpr for
std::char_traits
- P0435: Resolving LWG Issues re
common_type
- P0502: Throwing out of a parallel algorithm terminates - but how?
- P0503: Correcting library usage of "literal type"
- P0504: Revisiting in-place tag types for
any
/optional
/variant
- P0505: Wording for GB 50 - constexpr for
chrono
- P0508: Wording for GB 58 - structured bindings for
node_handles
- P0509: Updating "Restrictions on exception handling"
- P0510: Disallowing references, incomplete types, arrays, and empty variants
- P0513: Poisoning the Hash
- P0516: Clarify That
shared_future
's Copy Operations have Wide Contracts - P0517: Make
future_error
Constructible - P0521: Proposed Resolution for CA 14 (
shared_ptr
use_count
/unique
) - P0156: Variadic Lock guard(rev 5)
- P0270: Removing C dependencies from signal handler wording
- P0298: A byte type definition
- P0317: Directory Entry Caching for Filesystem
- P0430: File system library on non-POSIX-like operating systems
- P0433: Toward a resolution of US7 and US14: Integrating template deduction for class templates into the standard library
- P0452: Unifying
<numeric>
Parallel Algorithms - P0467: Iterator Concerns for Parallel Algorithms
- P0492: Proposed Resolution of C++17 National Body Comments for Filesystems
- P0518: Allowing copies as arguments to function objects given to parallel algorithms in response to CH11
- P0523: Wording for CH 10: Complexity of parallel algorithms
- P0548:
common_type
andduration
- P0558: Resolving
atomic<T>
named base class inconsistencies - P0574: Algorithm Complexity Constraints and Parallel Overloads
- P0599:
noexcept
for hash functions - P0604: Resolving GB 55, US 84, US 85, US 86
- P0607: Inline Variables for the Standard Library
- P0618: Deprecating
<codecvt>
- P0623: Final C++17 Parallel Algorithms Fixes
- P0682: Repairing elementary string conversions
- P0739: Some improvements to class template argument deduction integration into the standard library
- LWG2016:
Allocators
must be no-throw swappable - LWG2118:
unique_ptr
forarray
does not support cv qualification conversion of actual argument - LWG2170: Aggregates cannot be
DefaultConstructible
- LWG2308: Clarify container destructor requirements w.r.t.
std::array
- LWG2340: Replacement allocation functions declared as
inline
- LWG2354: Unnecessary copying when inserting into maps with braced-init syntax
- LWG2377:
std::align
requirements overly strict - LWG2396:
underlying_type
doesn't say what to do for an incomplete enumeration type - LWG2399:
shared_ptr
's constructor fromunique_ptr
should be constrained - LWG2400:
shared_ptr
'sget_deleter()
should useaddressof()
- LWG2401:
std::function
needs morenoexcept
- LWG2404:
mismatch()
's complexity needs to be updated - LWG2408: SFINAE-friendly
common_type
/iterator_traits
is missing in C++14 - LWG2106:
move_iterator
wrapping iterators returning prvalues - LWG2129: User specializations of
std::initializer_list
- LWG2212:
tuple_size
for const pair request header - LWG2217:
operator==(sub_match, string)
slices on embedded '\0's - LWG2230: "see below" for
initializer_list
constructors of unordered containers - LWG2233:
bad_function_call::what()
unhelpful - LWG2266:
vector
anddeque
have incorrectinsert
requirements - LWG2325:
minmax_element()
's behavior differing frommax_element()
's should be noted - LWG2361: Apply 2299 resolution throughout library
- LWG2365: Missing
noexcept
inshared_ptr::shared_ptr(nullptr_t)
- LWG2376:
bad_weak_ptr::what()
overspecified - LWG2387: More nested types that must be accessible and unambiguous
- LWG2059: C++0x ambiguity problem with
map::erase
- LWG2063: Contradictory requirements for string move assignment
- LWG2076: Bad
CopyConstructible
requirement in set constructors - LWG2160: Unintended destruction ordering-specification of resize
- LWG2168: Inconsistent specification of
uniform_real_distribution
constructor - LWG2239:
min
/max
/minmax
requirements - LWG2364:
deque
andvector
pop_back
don't specify iterator invalidation requirements - LWG2369:
constexpr max(initializer_list)
vsmax_element
- LWG2378: Behaviour of standard exception types
- LWG2403:
stof()
should callstrtof()
andwcstof()
- LWG2406:
negative_binomial_distribution
should rejectp == 1
- LWG2407:
packaged_task(allocator_arg_t, const Allocator&, F&&)
should neither be constrained norexplicit
- LWG2411:
shared_ptr
is only contextually convertible tobool
- LWG2415: Inconsistency between
unique_ptr
andshared_ptr
- LWG2420:
function<void(ArgTypes...)>
does not discard the return value of the target object - LWG2425:
operator delete(void*, size_t)
doesn't invalidate pointers sufficiently - LWG2427: Container adaptors as sequence containers, redux
- LWG2428: "External declaration" used without being defined
- LWG2433:
uninitialized_copy()
/etc. should tolerate overloadedoperator&
- LWG2434:
shared_ptr::use_count()
is efficient - LWG2437:
iterator_traits::reference
can and can't bevoid
- LWG2438:
std::iterator
inheritance shouldn't be mandated - LWG2439:
unique_copy()
sometimes can't fall back to reading its output - LWG2440:
seed_seq::size()
should benoexcept
- LWG2442:
call_once()
shouldn'tDECAY_COPY()
- LWG2448: Non-normative Container destructor specification
- LWG2454: Add
raw_storage_iterator::base()
member - LWG2455: Allocator default construction should be allowed to throw
- LWG2458: N3778 and new library deallocation signatures
- LWG2459:
std::polar
should require a non-negative rho - LWG2464:
try_emplace
andinsert_or_assign
misspecified - LWG2467:
is_always_equal
has slightly inconsistent default - LWG2470: Allocator's destroy function should be allowed to fail to instantiate
- LWG2482: [c.strings] Table 73 mentions nonexistent functions
- LWG2488: Placeholders should be allowed and encouraged to be
constexpr
- LWG1169:
num_get
not fully compatible withstrto*
- LWG2072: Unclear wording about capacity of temporary buffers
- LWG2101: Some transformation types can produce impossible types
- LWG2111: Which
unexpected
/terminate
handler is called from the exception handling runtime? - LWG2119: Missing
hash
specializations for extended integer types - LWG2127: Move-construction with
raw_storage_iterator
- LWG2133: Attitude to overloaded comma for iterators
- LWG2156: Unordered containers'
reserve(n)
reserves forn-1
elements - LWG2218: Unclear how containers use
allocator_traits::construct()
- LWG2219:
INVOKE
-ing a pointer to member with areference_wrapper
as the object expression - LWG2224: Ambiguous status of access to non-live objects
- LWG2234:
assert()
should allow usage in constant expressions - LWG2244: Issue on
basic_istream::seekg
- LWG2250: Follow-up On Library Issue 2207
- LWG2259: Issues in 17.6.5.5 rules for member functions
- LWG2273:
regex_match
ambiguity - LWG2336:
is_trivially_constructible
/is_trivially_assignable
traits are always false - LWG2353:
std::next
is over-constrained - LWG2367:
pair
andtuple
are not correctly implemented foris_constructible
with no args - LWG2380: May
<cstdlib>
providelong ::abs(long)
andlong long ::abs(long long)
? - LWG2384: Allocator's deallocate function needs better specification
- LWG2385:
function::assign
allocator argument doesn't make sense - LWG2435:
reference_wrapper::operator()
's Remark should be deleted - LWG2447: Allocators and
volatile
-qualified value types - LWG2462:
std::ios_base::failure
is overspecified - LWG2466:
allocator_traits::max_size()
default behavior is incorrect - LWG2469: Wrong specification of Requires clause of
operator[]
formap
andunordered_map
- LWG2473:
basic_filebuf
's relation to CFILE
semantics - LWG2476:
scoped_allocator_adaptor
is not assignable - LWG2477: Inconsistency of wordings in
std::vector::erase()
andstd::deque::erase()
- LWG2483:
throw_with_nested()
should useis_final
- LWG2484:
rethrow_if_nested()
is doubly unimplementable - LWG2485:
get()
should be overloaded forconst tuple&&
- LWG2486:
mem_fn()
should be required to use perfect forwarding - LWG2487:
bind()
should beconst
-overloaded, not cv-overloaded - LWG2489:
mem_fn()
should benoexcept
- LWG2492: Clarify requirements for
comp
- LWG2495: There is no such thing as an Exception Safety element
- LWG2192: Validity and return type of
std::abs(0u)
is unclear - LWG2276: Missing requirement on
std::promise::set_exception
- LWG2296:
std::addressof
should beconstexpr
- LWG2450:
(greater|less|greater_equal|less_equal)<void>
do not yield a total order for pointers - LWG2520: N4089 broke initializing
unique_ptr<T[]>
from anullptr
- LWG2523:
std::promise
synopsis shows twoset_value_at_thread_exit()
's for no apparent reason - LWG2537: Constructors for
priority_queue
taking allocators should callmake_heap
- LWG2545: Simplify wording for
bind
without explicitly specified return type - LWG2557: Logical operator traits are broken in the zero-argument case
- LWG2559: Error in LWG 2234's resolution
- LWG2560:
is_constructible
underspecified when applied to a function type - LWG2565:
std::function
's move constructor should guarantee nothrow forreference_wrapper
s and function pointers - LWG2566: Requirements on the first template parameter of container adaptors
- LWG2571:
[map.modifiers]/2
imposes nonsensical requirement oninsert(InputIterator, InputIterator)
- LWG2572: The remarks for
shared_ptr::operator*
should apply to cv-qualified void as well - LWG2576:
istream_iterator
andostream_iterator
should usestd::addressof
- LWG2577:
{shared,unique}_lock
should usestd::addressof
- LWG2579: Inconsistency wrt Allocators in
basic_string
assignment vs.basic_string::assign
- LWG2581: Specialization of
<type_traits>
variable templates should be prohibited - LWG2582:
[res.on.functions]/2
's prohibition against incomplete types shouldn't apply to type traits - LWG2583: There is no way to supply an allocator for
basic_string(str, pos)
- LWG2585:
forward_list::resize(size_type, const value_type&)
effects incorrect - LWG2586: Wrong value category used in
scoped_allocator_adaptor::construct()
- LWG2590: Aggregate initialization for
std::array
- LWG2181: Exceptions from seed sequence operations
- LWG2309:
mutex::lock()
should not throwdevice_or_resource_busy
- LWG2310: Public exposition only member in
std::array
- LWG2312:
tuple
's constructor constraints need to be phrased more precisely - LWG2328: Rvalue stream extraction should use perfect forwarding
- LWG2393:
std::function
'sCallable
definition is broken - LWG2422:
std::numeric_limits<T>::is_modulo description
: "most machines" errata - LWG2426: Issue about
compare_exchange
- LWG2436: Comparators for associative containers should always be
CopyConstructible
- LWG2441: Exact-width
atomic
typedefs should be provided - LWG2451: [fund.ts.v2]
optional<T>
shouldforward
T
's implicit conversions - LWG2542: Missing
const
requirements for associative containers - LWG2549: Tuple EXPLICIT constructor templates that take
tuple
parameters end up taking references to temporaries and will create dangling references - LWG2550: Wording of unordered container's
clear()
method complexity - LWG2596:
vector::data()
should useaddressof
- LWG2667:
path::root_directory()
description is confusing - LWG2669:
recursive_directory_iterator
effects refers to non-existent functions - LWG2670:
system_complete
refers to undefined variable 'base' - LWG2671: Errors in Copy
- LWG2673:
status()
effects cannot be implemented as specified - LWG2674: Bidirectional iterator requirement on
path::iterator
is very expensive - LWG2683:
filesystem::copy()
says "no effects" - LWG2684:
priority_queue
lacking comparator typedef - LWG2685:
shared_ptr
deleters must not throw on move construction - LWG2687:
{inclusive,exclusive}_scan
misspecified - LWG2688:
clamp
misses preconditions and has extraneous condition on result - LWG2689: Parallel versions of
std::copy
andstd::move
shouldn't be in order - LWG2698: Effect of
assign()
on iterators/pointers/references - LWG2704:
recursive_directory_iterator
's members should require '*this
is dereferenceable' - LWG2706: Error reporting for
recursive_directory_iterator::pop()
is under-specified - LWG2707:
path
construction and assignment should havestring_type&&
overloads - LWG2709:
offsetof
is unnecessarily imprecise - LWG2710: "Effects: Equivalent to ..." doesn't count "Synchronization:" as determined semantics
- LWG2711:
path
is convertible from approximately everything under the sun - LWG2716: Specification of
shuffle
andsample
disallows lvalue URNGs - LWG2718: Parallelism bug in [algorithms.parallel.exec] p2
- LWG2719:
permissions
function should not benoexcept
due to narrow contract - LWG2720:
permissions
function incorrectly specified for symlinks - LWG2721:
remove_all
has incorrect post conditions - LWG2723: Do
directory_iterator
andrecursive_directory_iterator
become the end iterator upon error? - LWG2724: The protected virtual member functions of
memory_resource
should be private - LWG2725:
filesystem::exists(const path&, error_code&)
error reporting - LWG2726:
[recursive_]directory_iterator::increment(error_code&)
is underspecified - LWG2727: Parallel algorithms with
constexpr
specifier - LWG2728:
status(p).permissions()
andsymlink_status(p).permissions()
are not specified - LWG2062: Effect contradictions w/o no-throw guarantee of
std::function
swaps - LWG2166: Heap property underspecified?
- LWG2221: No formatted output operator for
nullptr
- LWG2223:
shrink_to_fit
effect on iterator validity - LWG2261: Are containers required to use their 'pointer' type internally?
- LWG2394:
locale::name
specification unclear - what is implementation-defined? - LWG2460: LWG issue 2408 and value categories
- LWG2468: Self-move-assignment of library types
- LWG2475: Allow overwriting of
std::basic_string
terminator withcharT()
to allow cleaner interoperation with legacy APIs - LWG2503: multiline option should be added to
syntax_option_type
- LWG2510: Tag types should not be
DefaultConstructible
- LWG2514: Type traits must not be
final
- LWG2519: Iterator
operator-=
has gratuitous undefined behaviour - LWG2531:
future::get
should explicitly state that the shared state is released - LWG2534: Constrain rvalue stream operators
- LWG2536: What should
<complex.h>
do? - LWG2540:
unordered_multimap::insert
hint iterator - LWG2543: LWG 2148 (hash support for enum types) seems under-specified
- LWG2544:
istreambuf_iterator(basic_streambuf* s)
effects unclear whens
is0
- LWG2556: Wide contract for
future::share()
- LWG2562: Consistent total ordering of pointers by comparison functors
- LWG2567: Specification of logical operator traits uses
BaseCharacteristic
, which is defined only forUnaryTypeTraits
andBinaryTypeTraits
- LWG2569:
conjunction
anddisjunction
requirements are too strict - LWG2578: Iterator requirements should reference iterator traits
- LWG2584:
<regex>
ECMAScriptIdentityEscape
is ambiguous - LWG2587: "Convertible to
bool
" requirement inconjunction
anddisjunction
- LWG2589:
match_results
can't satisfy the requirements of a container - LWG2591:
std::function
's member templatetarget()
should not lead to undefined behaviour - LWG2598:
addressof
works on temporaries - LWG2664:
operator/
(and other append) semantics not useful if argument has root - LWG2665:
remove_filename()
post condition is incorrect - LWG2672: Should
is_empty
useerror_code
in its specification? - LWG2678:
std::filesystem
enum classes overspecified - LWG2679: Inconsistent Use of Effects and Equivalent To
- LWG2680: Add "Equivalent to" to filesystem
- LWG2681:
filesystem::copy()
cannot copy symlinks - LWG2682:
filesystem::copy()
won't create a symlink to a directory - LWG2686: Why is
std::hash
specialized forerror_code
, but noterror_condition
? - LWG2694: Application of LWG 436 accidentally deleted definition of "facet"
- LWG2696: Interaction between
make_shared
andenable_shared_from_this
is underspecified - LWG2699: Missing restriction in [numeric.requirements]
- LWG2712:
copy_file(from, to, ...)
has a number of unspecified error conditions - LWG2722:
equivalent
incorrectly specifies throws clause - LWG2729: Missing SFINAE on
std::pair::operator=
- LWG2732: Questionable specification of
path::operator/=
andpath::append
- LWG2735:
std::abs(short)
,std::abs(signed char)
and others should return int instead ofdouble
in order to be compatible with C++98 and C - LWG2736:
nullopt_t
insufficiently constrained - LWG2738:
is_constructible
withvoid
types - LWG2739: Issue with
time_point
non-member subtraction with an unsigned duration - LWG2740:
constexpr optional::operator->
- LWG2742: Inconsistent string interface taking
string_view
- LWG2744:
any
'sin_place
constructors - LWG2747: Possibly redundant
std::move
in [alg.foreach] - LWG2748:
swappable
traits for optionals - LWG2749:
swappable
traits for variants - LWG2752: "Throws:" clauses of
async
andpackaged_task
are unimplementable - LWG2755: [string.view.io] uses non-existent
basic_string_view::to_string
function - LWG2756: C++ WP optional should
forward
T
's implicit conversions - LWG2758:
std::string{}.assign("ABCDE", 0, 1)
is ambiguous - LWG2759:
gcd
/lcm
andbool
for the WP - LWG2760: non-
const
basic_string::data
should not invalidate iterators - LWG2765: Did LWG 1123 go too far?
- LWG2767:
not_fn
call_wrapper
can form invalid types - LWG2769: Redundant const in the return type of
any_cast(const any&)
- LWG2771: Broken Effects of some
basic_string::compare
functions in terms ofbasic_string_view
- LWG2773: Making
std::ignore
constexpr - LWG2777:
basic_string_view::copy
should usechar_traits::copy
- LWG2778:
basic_string_view
is missingconstexpr
- LWG2260: Missing requirement for
Allocator::pointer
- LWG2676: Provide
filesystem::path
overloads for File-based streams - LWG2768:
any_cast
and move semantics - LWG2769: Redundant
const
in the return type ofany_cast(const any&)
- LWG2781: Contradictory requirements for
std::function
andstd::reference_wrapper
- LWG2782:
scoped_allocator_adaptor
constructors must be constrained - LWG2784: Resolution to LWG 2484 is missing "otherwise, no effects" and is hard to parse
- LWG2785:
quoted
should work withbasic_string_view
- LWG2786: Annex C should mention
shared_ptr
changes for array support - LWG2787:
[file_status.cons]
doesn't match class definition - LWG2788:
basic_string
range mutators unintentionally require a default constructible allocator - LWG2789: Equivalence of contained objects
- LWG2790: Missing specification of
istreambuf_iterator::operator->
- LWG2794: Missing requirements for allocator pointers
- LWG2795:
[global.functions]
provides incorrect example of ADL use - LWG2796:
tuple
should be a literal type - LWG2801: Default-constructibility of
unique_ptr
- LWG2802:
shared_ptr
constructor requirements for a deleter - LWG2804: Unconditional
constexpr
default constructor foristream_iterator
- LWG2806: Base class of
bad_optional_access
- LWG2807:
std::invoke
should usestd::is_nothrow_callable
- LWG2812: Range access is available with
<string_view>
- LWG2824:
list::sort
should say that the order of elements is unspecified if an exception is thrown - LWG2826:
string_view
iterators use old wording - LWG2834: Resolution LWG 2223 is missing wording about end iterators
- LWG2835: LWG 2536 seems to misspecify
<tgmath.h>
- LWG2837:
gcd
andlcm
should support a wider range of input values - LWG2838:
is_literal_type
specification needs a little cleanup - LWG2842:
in_place_t
check foroptional::optional(U&&)
should decayU
- LWG2850:
std::function
move constructor does unnecessary work - LWG2853: Possible inconsistency in specification of erase in
[vector.modifiers]
- LWG2855:
std::throw_with_nested("string_literal")
- LWG2857:
{variant,optional,any}::emplace
should return the constructed value - LWG2861:
basic_string
should require thatcharT
matchtraits::char_type
- LWG2866: Incorrect derived classes constraints
- LWG2868: Missing specification of
bad_any_cast::what()
- LWG2872: Add definition for direct-non-list-initialization
- LWG2873: Add
noexcept
to severalshared_ptr
related functions - LWG2874: Constructor
shared_ptr::shared_ptr(Y*)
should be constrained - LWG2875:
shared_ptr::shared_ptr(Y*, D, [...])
constructors should be constrained - LWG2876:
shared_ptr::shared_ptr(const weak_ptr<Y>&)
constructor should be constrained - LWG2878: Missing
DefaultConstructible
requirement foristream_iterator
default constructor - LWG2890: The definition of 'object state' applies only to class types
- LWG2900: The copy and move constructors of optional are not
constexpr
- LWG2903: The form of initialization for the emplace-constructors is not specified
- LWG2904: Make variant move-assignment more exception safe
- LWG2905:
is_constructible_v<unique_ptr<P, D>, P, D const &>
should be false whenD
is not copy constructible - LWG2908: The less-than operator for shared pointers could do more
- LWG2911: An
is_aggregate
type trait is needed - LWG2921:
packaged_task
and type-erased allocators - LWG2934:
optional<const T>
doesn't compare withT
- LWG2901: Variants cannot properly support allocators
- LWG2955:
to_chars
/from_chars
depend onstd::string
(P0682R1) - LWG2956:
filesystem::canonical()
still defined in terms ofabsolute(p, base)
- P0463:
endian
, justendian
- P0674: Extending
make_shared
to Support Arrays - P0020: Floating Point Atomic
- P0053: C++ Synchronized Buffered Ostream
- P0202: Add constexpr modifiers to functions in
<algorithm>
and<utility>
Headers - P0415: Constexpr for
std::complex
- P0439: Make
std::memory_order
a scoped enumeration - P0457: String Prefix and Suffix Checking
- P0550: Transformation Trait
remove_cvref
- P0600:
nodiscard
in the Library - P0616: de-pessimize legacy algorithms with
std::move
- P0653: Utility to convert a pointer to a raw pointer
- P0718: Atomic
shared_ptr
- P0767: Deprecate POD
- P0768: Library Support for the Spaceship (Comparison) Operator
- P0777: Treating Unnecessary
decay
- P0122:
<span>
- P0355: Extending chrono to Calendars and Time Zones
- P0551: Thou Shalt Not Specialize
std
Function Templates! - P0753: Manipulators for C++ Synchronized Buffered Ostream
- P0754:
<version>
- P0809: Comparing Unordered Containers
- P0858: Constexpr iterator requirements
- P0905: Symmetry for spaceship
- P0966:
string::reserve
Should Not Shrink - P0019: Atomic Ref
- P0458: Checking for Existence of an Element in Associative Containers
- P0475: LWG 2511: guaranteed copy elision for piecewise construction
- P0476: Bit-casting object representations
- P0528: The Curious Case of Padding Bits, Featuring Atomic Compare-and-Exchange
- P0542: Support for contract based programming in C++
- P0556: Integral power-of-2 operations
- P0619: Reviewing Deprecated Facilities of C++17 for C++20
- P0646: Improving the Return Value of Erase-Like Algorithms
- P0722: Efficient sized delete for variable sized classes
- P0758: Implicit conversion traits and utility functions
- P0759:
fpos
Requirements - P0769: Add shift to
<algorithm>
- P0788: Standard Library Specification in a Concepts and Contracts World
- P0879: Constexpr for swap and swap related functions Also resolves LWG issue 2800.
- P0887: The identity metafunction
- P0892:
explicit(bool)
- P0898: Standard Library Concepts
- P0935: Eradicating unnecessarily
explicit
default constructors from the standard library - P0941: Integrating feature-test macros into the C++ WD
- P1023:
constexpr
comparison operators forstd::array
- P1025: Update The Reference To The Unicode Standard
- P1120: Consistency improvements for
<=>
and other comparison operators - P0318:
unwrap_ref_decay
andunwrap_reference
- P0356: Simplified partial function application
- P0357:
reference_wrapper
for incomplete types - P0482:
char8_t
: A type for UTF-8 characters and strings - P0487: Fixing
operator>>(basic_istream&, CharT*)
(LWG 2499) - P0591: Utility functions to implement uses-allocator construction
- P0595:
std::is_constant_evaluated()
- P0602:
variant
andoptional
should propagate copy/move triviality - P0608: A sane
variant
converting constructor - P0655:
visit<R>
: Explicit Return Type forvisit
- P0771:
std::function
move constructor should benoexcept
- P0896: The One Ranges Proposal
- P0899: LWG 3016 is not a defect
- P0919: Heterogeneous lookup for unordered containers
- P0972:
<chrono>
zero()
,min()
, andmax()
should benoexcept
- P1006: Constexpr in
std::pointer_traits
- P1007:
std::assume_aligned
- P1020: Smart pointer creation with default initialization
- P1032: Misc
constexpr
bits - P1085: Should Span be Regular?
- P1123: Editorial Guidance for merging P0019r8 and P0528r3
- P1148: Cleaning up Clause 20
- P1165: Make stateful allocator propagation more consistent for
operator+(basic_string)
- P1209: Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20
- P1236: Alternative Wording for P0907R4 Signed Integers are Two's Complement
- P1248: Remove CommonReference requirement from StrictWeakOrdering (a.k.a Fixing Relations)
- P1285: Improving Completeness Requirements for Type Traits
- P1353: Missing feature test macros
- LWG2070:
allocate_shared
should useallocator_traits<A>::construct
(P0674R1) - LWG2444: Inconsistent complexity for
std::sort_heap
- LWG2593: Moved-from state of Allocators
- LWG2597:
std::log
misspecified for complex numbers - LWG2783:
stack::emplace()
andqueue::emplace()
should returndecltype(auto)
- LWG2932: Constraints on parallel algorithm implementations are underspecified
- LWG2937: Is
equivalent("existing_thing", "not_existing_thing")
an error - LWG2940:
result_of
specification also needs a little cleanup - LWG2942: LWG 2873's resolution missed
weak_ptr::owner_before
- LWG2954: Specialization of the convenience variable templates should be prohibited
- LWG2961: Bad postcondition for
set_default_resource
- LWG2966: Incomplete resolution of US 74
- LWG2974: Diagnose out of bounds
tuple_element
/variant_alternative
- LWG2870: Default value of parameter theta of polar should be dependent
- LWG2935: What should
create_directories
do when p already exists but is not a directory? - LWG2941: [thread.req.timing] wording should apply to both member and namespace-level functions
- LWG2944: LWG 2905 accidentally removed requirement that construction of the deleter doesn't throw an exception
- LWG2945: Order of template parameters in
optional
comparisons - LWG2948:
unique_ptr
does not defineoperator<<
for stream output - LWG2950:
std::byte
operations are misspecified - LWG2952:
iterator_traits
should work for pointers to cvT
- LWG2953: LWG 2853 should apply to
deque::erase
too - LWG2958: Moves improperly defined as deleted
- LWG2964: Apparently redundant requirement for
dynamic_pointer_cast
- LWG2965: Non-existing
path::native_string()
infilesystem_error::what()
specification - LWG2972: What is
is_trivially_destructible_v
? - LWG2976: Dangling
uses_allocator
specialization forpackaged_task
- LWG2977:
unordered_meow::merge()
has incorrect Throws: clause - LWG2978: Hash support for
pmr::string
and friends - LWG2979:
aligned_union
should require object types - LWG2980: Cannot
compare_exchange
empty pointers - LWG2981: Remove redundant deduction guides from standard library
- LWG2982: Making
size_type
consistent in associative container deduction guides - LWG2988: Clause 32 cleanup missed one
typename
- LWG2993:
reference_wrapper
conversion fromT&&
- LWG2998: Requirements on function objects passed to
{forward_,}list
-specific algorithms - LWG3001:
weak_ptr::element_type
needsremove_extent_t
- LWG3024:
variant
's copies must be deleted instead of disabled via SFINAE - LWG2164: What are the semantics of
vector.emplace(vector.begin(), vector.back())
? - LWG2243:
istream::putback
problem - LWG2816:
resize_file
has impossible postcondition - LWG2843: Unclear behavior of
std::pmr::memory_resource::do_allocate()
- LWG2849: Why does
!is_regular_file(from)
causecopy_file
to report a "file already exists" error? - LWG2851:
std::filesystem
enum classes are now underspecified - LWG2946: LWG 2758's resolution missed further corrections
- LWG2969:
polymorphic_allocator::construct()
shouldn't passresource()
- LWG2975: Missing case for
pair
construction in scoped and polymorphic allocators - LWG2989:
path
's stream insertion operator lets you insert everything under the sun - LWG3000:
monotonic_memory_resource::do_is_equal
uses dynamic_cast unnecessarily - LWG3004: string.capacity and vector.capacity should specify time complexity for
capacity()
- LWG3005: Destruction order of arrays by
make_shared
/allocate_shared
only recommended? - LWG3007:
allocate_shared
should rebind allocator to cv-unqualifiedvalue_type
for construction - LWG3009: Including
<string_view>
doesn't providestd::size/empty/data
- LWG3013:
(recursive_)directory_iterator
construction and traversal should not benoexcept
- LWG3014: More
noexcept
issues with filesystem operations - LWG3015:
copy_options::unspecified
underspecified - LWG3017: list splice functions should use
addressof
- LWG3026:
filesystem::weakly_canonical
still defined in terms ofcanonical(p, base)
- LWG3030: Who shall meet the requirements of
try_lock
? - LWG3034: P0767R1 breaks previously-standard-layout types
- LWG3035:
std::allocator
's constructors should beconstexpr
- LWG3039: Unnecessary
decay
inthread
andpackaged_task
- LWG3041: Unnecessary
decay
inreference_wrapper
- LWG3043: Bogus postcondition for
filesystem_error
constructor - LWG3045:
atomic<floating-point>
doesn't havevalue_type
ordifference_type
- LWG3048:
transform_reduce(exec, first1, last1, first2, init)
discards execution policy - LWG3051: Floating point classifications were inadvertently changed in P0175
- LWG3075:
basic_string
needs deduction guides frombasic_string_view
- LWG2139: What is a user-defined type?
- LWG2970: Return type of
std::visit
misspecified - LWG3058: Parallel
adjacent_difference
shouldn't require creating temporaries - LWG3062: Unnecessary
decay_t
inis_execution_policy_v
should beremove_cvref_t
- LWG3067:
recursive_directory_iterator::pop
must invalidate - LWG3074: Non-member functions for
valarray
should only deduce from thevalarray
- LWG3076:
basic_string
CTAD ambiguity - LWG3079: LWG 2935 forgot to fix the
existing_p
overloads ofcreate_directory
- LWG3080: Floating point
from_chars
pattern specification breaks round-tripping - LWG3083: What should
ios::iword(-1)
do? - LWG3094:
[time.duration.io]p4
makes surprising claims about encoding - LWG3100: Unnecessary and confusing "empty span" wording
- LWG3102: Clarify
span
iterator
andconst_iterator
behavior - LWG3104: Fixing
duration
division - LWG2183: Muddled allocator requirements for
match_results
constructors - LWG2184: Muddled allocator requirements for
match_results
assignments - LWG2412:
promise::set_value()
andpromise::get_future()
should not race - LWG2499:
operator>>(basic_istream&, CharT*)
makes it hard to avoid buffer overflows - LWG2682:
filesystem::copy()
won't create a symlink to a directory - LWG2797: Trait precondition violations
- LWG2936: Path comparison is defined in terms of the generic format
- LWG2943: Problematic specification of the wide version of
basic_filebuf::open
- LWG2995:
basic_stringbuf
default constructor forbids it from using SSO capacity - LWG2996: Missing rvalue overloads for
shared_ptr
operations - LWG3008:
make_shared
(sub)object destruction semantics are not specified - LWG3022:
is_convertible<derived*, base*>
may lead to ODR - LWG3025: Map-like container deduction guides should use
pair<Key, T>
, notpair<const Key, T>
- LWG3031: Algorithms and predicates with non-const reference arguments
- LWG3037:
polymorphic_allocator
and incomplete types - LWG3038:
polymorphic_allocator::allocate
should not allow integer overflow to create vulnerabilities - LWG3054:
uninitialized_copy
appears to not be able to meet its exception-safety guarantee - LWG3065: LWG 2989 missed that all
path
's other operators should be hidden friends as well - LWG3096:
path::lexically_relative
is confused by trailing slashes - LWG3116:
OUTERMOST_ALLOC_TRAITS>
needsremove_reference_t
- LWG3122:
__cpp_lib_chrono_udls
was accidentally dropped - LWG3127:
basic_osyncstream::rdbuf
needs aconst_cast
- LWG3128:
strstream::rdbuf
needs aconst_cast
- LWG3129:
regex_token_iterator
constructor uses wrong pointer arithmetic - LWG3130:
[input.output]
needs manyaddressof
- LWG3131:
addressof
all the things - LWG3132: Library needs to ban macros named
expects
orensures
- LWG3137: Header for
__cpp_lib_to_chars
- LWG3145:
file_clock
breaks ABI for C++17 implementations - LWG3147: Definitions of "likely" and "unlikely" are likely to cause problems
- LWG3148:
<concepts>
should be freestanding - LWG3153:
Common
andcommon_type
have too little in common - LWG3154:
Common
andCommonReference
have a common defect