libc++ C++17 Status

Overview

In November 2014, the C++ standard committee created a draft for the next version of the C++ standard, initially known as “C++1z”. In February 2017, the C++ standard committee approved this draft, and sent it to ISO for approval as C++17.

This page shows the status of libc++; the status of clang’s support of the language features is here.

Attention

Features in unreleased drafts of the standard are subject to change.

The groups that have contributed papers:

  • CWG - Core Language Working group

  • LWG - Library working group

  • SG1 - Study group #1 (Concurrency working group)

Note

“Nothing to do” means that no library changes were needed to implement this change.

Paper Status

Paper #

Group

Paper Name

Meeting

Status

First released version

N3911

LWG

TransformationTrait Alias void_t.

Urbana

Complete

3.6

N4089

LWG

Safe conversions in unique_ptr<T[]>.

Urbana

In Progress

3.9

N4169

LWG

A proposal to add invoke function template

Urbana

Complete

3.7

N4190

LWG

Removing auto_ptr, random_shuffle(), And Old <functional> Stuff.

Urbana

In Progress

N4258

LWG

Cleaning-up noexcept in the Library.

Urbana

In Progress

3.7

N4259

CWG

Wording for std::uncaught_exceptions

Urbana

Complete

3.7

N4277

LWG

TriviallyCopyable reference_wrapper.

Urbana

Complete

3.2

N4279

LWG

Improved insertion interface for unique-key maps.

Urbana

Complete

3.7

N4280

LWG

Non-member size() and more

Urbana

Complete

3.6

N4284

LWG

Contiguous Iterators.

Urbana

Complete

3.6

N4285

CWG

Cleanup for exception-specification and throw-expression.

Urbana

Complete

4.0

N4387

LWG

improving pair and tuple

Lenexa

Complete

4.0

N4389

LWG

bool_constant

Lenexa

Complete

3.7

N4508

LWG

shared_mutex for C++17

Lenexa

Complete

3.7

N4366

LWG

LWG 2228 missing SFINAE rule

Lenexa

Complete

3.1

N4510

LWG

Minimal incomplete type support for standard containers, revision 4

Lenexa

Complete

3.6

P0004R1

LWG

Remove Deprecated iostreams aliases.

Kona

Complete

3.8

P0006R0

LWG

Adopt Type Traits Variable Templates for C++17.

Kona

Complete

3.8

P0092R1

LWG

Polishing <chrono>

Kona

Complete

3.8

P0007R1

LWG

Constant View: A proposal for a std::as_const helper function template.

Kona

Complete

3.8

P0156R0

LWG

Variadic lock_guard(rev 3).

Kona

Reverted in Kona

3.9

P0074R0

LWG

Making std::owner_less more flexible

Kona

Complete

3.8

P0013R1

LWG

Logical type traits rev 2

Kona

Complete

3.8

P0024R2

LWG

The Parallelism TS Should be Standardized

Jacksonville

P0226R1

LWG

Mathematical Special Functions for C++17

Jacksonville

P0220R1

LWG

Adopt Library Fundamentals V1 TS Components for C++17

Jacksonville

In Progress

P0218R1

LWG

Adopt the File System TS for C++17

Jacksonville

Complete

7.0

P0033R1

LWG

Re-enabling shared_from_this

Jacksonville

Complete

3.9

P0005R4

LWG

Adopt not_fn from Library Fundamentals 2 for C++17

Jacksonville

Complete

3.9

P0152R1

LWG

constexpr atomic::is_always_lock_free

Jacksonville

Complete

3.9

P0185R1

LWG

Adding [nothrow-]swappable traits

Jacksonville

Complete

3.9

P0253R1

LWG

Fixing a design mistake in the searchers interface

Jacksonville

Complete

3.9

P0025R0

LWG

An algorithm to “clamp” a value between a pair of boundary values

Jacksonville

Complete

3.9

P0154R1

LWG

constexpr std::hardware_{constructive,destructive}_interference_size

Jacksonville

P0030R1

LWG

Proposal to Introduce a 3-Argument Overload to std::hypot

Jacksonville

Complete

3.9

P0031R0

LWG

A Proposal to Add Constexpr Modifiers to reverse_iterator, move_iterator, array and Range Access

Jacksonville

Complete

4.0

P0272R1

LWG

Give std::string a non-const .data() member function

Jacksonville

Complete

3.9

P0077R2

LWG

is_callable, the missing INVOKE related trait

Jacksonville

Complete

3.9

p0032r3

LWG

Homogeneous interface for variant, any and optional

Oulu

Complete

4.0

p0040r3

LWG

Extending memory management tools

Oulu

Complete

4.0

p0063r3

LWG

C++17 should refer to C11 instead of C99

Oulu

Complete

7.0

p0067r3

LWG

Elementary string conversions

Oulu

Now P0067R5

n/a

p0083r3

LWG

Splicing Maps and Sets

Oulu

Complete

8.0

p0084r2

LWG

Emplace Return Type

Oulu

Complete

4.0

p0088r3

LWG

Variant: a type-safe union for C++17

Oulu

Complete

4.0

p0137r1

CWG

Core Issue 1776: Replacement of class objects containing reference members

Oulu

Complete

6.0

p0163r0

LWG

shared_ptr::weak_type

Oulu

Complete

3.9

p0174r2

LWG

Deprecating Vestigial Library Parts in C++17

Oulu

Partial

p0175r1

LWG

Synopses for the C library

Oulu

p0180r2

LWG

Reserve a New Library Namespace for Future Standardization

Oulu

Nothing To Do

n/a

p0181r1

LWG

Ordered by Default

Oulu

Removed in Kona

n/a

p0209r2

LWG

make_from_tuple: apply for construction

Oulu

Complete

3.9

p0219r1

LWG

Relative Paths for Filesystem

Oulu

Complete

7.0

p0254r2

LWG

Integrating std::string_view and std::string

Oulu

Complete

4.0

p0258r2

LWG

has_unique_object_representations

Oulu

Complete

6.0

p0295r0

LWG

Adopt Selected Library Fundamentals V2 Components for C++17

Oulu

Complete

4.0

p0302r1

LWG

Removing Allocator Support in std::function

Oulu

Complete

4.0

p0307r2

LWG

Making Optional Greater Equal Again

Oulu

Complete

4.0

p0336r1

LWG

Better Names for Parallel Execution Policies in C++17

Oulu

p0337r0

LWG

Delete operator= for polymorphic_allocator

Oulu

Complete

3.9

p0346r1

LWG

A <random> Nomenclature Tweak

Oulu

Complete

3.9

p0358r1

LWG

Fixes for not_fn

Oulu

Complete

3.9

p0371r1

LWG

Temporarily discourage memory_order_consume

Oulu

Nothing To Do

n/a

p0392r0

LWG

Adapting string_view by filesystem paths

Oulu

Complete

4.0

p0393r3

LWG

Making Variant Greater Equal

Oulu

Complete

4.0

P0394r4

LWG

Hotel Parallelifornia: terminate() for Parallel Algorithms Exception Handling

Oulu

P0003R5

LWG

Removing Deprecated Exception Specifications from C++17

Issaquah

Complete

5.0

P0067R5

LWG

Elementary string conversions, revision 5

Issaquah

Partial

P0403R1

LWG

Literal suffixes for basic_string_view

Issaquah

Complete

4.0

P0414R2

LWG

Merging shared_ptr changes from Library Fundamentals to C++17

Issaquah

Complete

11.0

P0418R2

LWG

Fail or succeed: there is no atomic lattice

Issaquah

P0426R1

LWG

Constexpr for std::char_traits

Issaquah

Complete

4.0

P0435R1

LWG

Resolving LWG Issues re common_type

Issaquah

Complete

4.0

P0502R0

LWG

Throwing out of a parallel algorithm terminates - but how?

Issaquah

P0503R0

LWG

Correcting library usage of “literal type”

Issaquah

Complete

4.0

P0504R0

LWG

Revisiting in-place tag types for any/optional/variant

Issaquah

Complete

4.0

P0505R0

LWG

Wording for GB 50 - constexpr for chrono

Issaquah

Complete

4.0

P0508R0

LWG

Wording for GB 58 - structured bindings for node_handles

Issaquah

P0509R1

LWG

Updating “Restrictions on exception handling”

Issaquah

Nothing To Do

n/a

P0510R0

LWG

Disallowing references, incomplete types, arrays, and empty variants

Issaquah

Complete

4.0

P0513R0

LWG

Poisoning the Hash

Issaquah

Complete

5.0

P0516R0

LWG

Clarify That shared_future’s Copy Operations have Wide Contracts

Issaquah

Complete

4.0

P0517R0

LWG

Make future_error Constructible

Issaquah

Complete

4.0

P0521R0

LWG

Proposed Resolution for CA 14 (shared_ptr use_count/unique)

Issaquah

Nothing To Do

n/a

P0156R2

LWG

Variadic Lock guard(rev 5)

Kona

Complete

5.0

P0270R3

CWG

Removing C dependencies from signal handler wording

Kona

P0298R3

CWG

A byte type definition

Kona

Complete

5.0

P0317R1

LWG

Directory Entry Caching for Filesystem

Kona

Complete

7.0

P0430R2

LWG

File system library on non-POSIX-like operating systems

Kona

Complete

7.0

P0433R2

LWG

Toward a resolution of US7 and US14: Integrating template deduction for class templates into the standard library

Kona

In Progress 1

7.0

P0452R1

LWG

Unifying <numeric> Parallel Algorithms

Kona

P0467R2

LWG

Iterator Concerns for Parallel Algorithms

Kona

P0492R2

LWG

Proposed Resolution of C++17 National Body Comments for Filesystems

Kona

Complete

7.0

P0518R1

LWG

Allowing copies as arguments to function objects given to parallel algorithms in response to CH11

Kona

P0523R1

LWG

Wording for CH 10: Complexity of parallel algorithms

Kona

P0548R1

LWG

common_type and duration

Kona

Complete

5.0

P0558R1

LWG

Resolving atomic<T> named base class inconsistencies

Kona

P0574R1

LWG

Algorithm Complexity Constraints and Parallel Overloads

Kona

P0599R1

LWG

noexcept for hash functions

Kona

Complete

5.0

P0604R0

LWG

Resolving GB 55, US 84, US 85, US 86

Kona

Complete

P0607R0

LWG

Inline Variables for the Standard Library

Kona

In Progress 2

6.0

P0618R0

LWG

Deprecating <codecvt>

Kona

P0623R0

LWG

Final C++17 Parallel Algorithms Fixes

Kona

P0682R1

LWG

Repairing elementary string conversions

Toronto

P0739R0

LWG

Some improvements to class template argument deduction integration into the standard library

Toronto

Complete

5.0

Note

1

P0433: So far, only the <string>, sequence containers, container adaptors and <regex> portions of P0433 have been implemented.

2

P0607: The parts of P0607 that are not done are the <regex> bits.

Library Working Group Issues Status

Issue #

Issue Name

Meeting

Status

First released version

2016

Allocators must be no-throw swappable

Urbana

Complete

2118

unique_ptr for array does not support cv qualification conversion of actual argument

Urbana

Complete

2170

Aggregates cannot be DefaultConstructible

Urbana

Complete

2308

Clarify container destructor requirements w.r.t. std::array

Urbana

Complete

2340

Replacement allocation functions declared as inline

Urbana

Complete

2354

Unnecessary copying when inserting into maps with braced-init syntax

Urbana

Complete

2377

std::align requirements overly strict

Urbana

Complete

2396

underlying_type doesn’t say what to do for an incomplete enumeration type

Urbana

Complete

2399

shared_ptr’s constructor from unique_ptr should be constrained

Urbana

Complete

2400

shared_ptr’s get_deleter() should use addressof()

Urbana

Complete

2401

std::function needs more noexcept

Urbana

Complete

2404

mismatch()’s complexity needs to be updated

Urbana

Complete

2408

SFINAE-friendly common_type / iterator_traits is missing in C++14

Urbana

Complete

2106

move_iterator wrapping iterators returning prvalues

Urbana

Complete

2129

User specializations of std::initializer_list

Urbana

Complete

2212

tuple_size for const pair request <tuple> header

Urbana

Complete

2217

operator==(sub_match, string) slices on embedded ‘0’s

Urbana

Complete

2230

“see below” for initializer_list constructors of unordered containers

Urbana

Complete

2233

bad_function_call::what() unhelpful

Urbana

Complete

2266

vector and deque have incorrect insert requirements

Urbana

Complete

2325

minmax_element()’s behavior differing from max_element()’s should be noted

Urbana

Complete

2361

Apply 2299 resolution throughout library

Urbana

Complete

2365

Missing noexcept in shared_ptr::shared_ptr(nullptr_t)

Urbana

Complete

2376

bad_weak_ptr::what() overspecified

Urbana

Complete

2387

More nested types that must be accessible and unambiguous

Urbana

Complete

2059

C++0x ambiguity problem with map::erase

Lenexa

Complete

2063

Contradictory requirements for string move assignment

Lenexa

Complete

2076

Bad CopyConstructible requirement in set constructors

Lenexa

Complete

2160

Unintended destruction ordering-specification of resize

Lenexa

Complete

2168

Inconsistent specification of uniform_real_distribution constructor

Lenexa

Complete

2239

min/max/minmax requirements

Lenexa

Complete

2364

deque and vector pop_back don’t specify iterator invalidation requirements

Lenexa

Complete

2369

constexpr max(initializer_list) vs max_element

Lenexa

Complete

2378

Behaviour of standard exception types

Lenexa

Complete

2403

stof() should call strtof() and wcstof()

Lenexa

Complete

2406

negative_binomial_distribution should reject p == 1

Lenexa

Complete

2407

packaged_task(allocator_arg_t, const Allocator&, F&&) should neither be constrained nor explicit

Lenexa

Complete

2411

shared_ptr is only contextually convertible to bool

Lenexa

Complete

2415

Inconsistency between unique_ptr and shared_ptr

Lenexa

Complete

2420

function<void(ArgTypes…)> does not discard the return value of the target object

Lenexa

Complete

2425

operator delete(void*, size_t) doesn’t invalidate pointers sufficiently

Lenexa

Complete

2427

Container adaptors as sequence containers, redux

Lenexa

Complete

2428

“External declaration” used without being defined

Lenexa

Complete

2433

uninitialized_copy()/etc. should tolerate overloaded operator&

Lenexa

Complete

2434

shared_ptr::use_count() is efficient

Lenexa

Complete

2437

iterator_traits::reference can and can’t be void

Lenexa

Complete

2438

std::iterator inheritance shouldn’t be mandated

Lenexa

Complete

2439

unique_copy() sometimes can’t fall back to reading its output

Lenexa

Complete

2440

seed_seq::size() should be noexcept

Lenexa

Complete

2442

call_once() shouldn’t DECAY_COPY()

Lenexa

Complete

2448

Non-normative Container destructor specification

Lenexa

Complete

2454

Add raw_storage_iterator::base() member

Lenexa

Complete

2455

Allocator default construction should be allowed to throw

Lenexa

Complete

2458

N3778 and new library deallocation signatures

Lenexa

Complete

2459

std::polar should require a non-negative rho

Lenexa

Complete

2464

try_emplace and insert_or_assign misspecified

Lenexa

Complete

2467

is_always_equal has slightly inconsistent default

Lenexa

Complete

2470

Allocator’s destroy function should be allowed to fail to instantiate

Lenexa

Complete

2482

[c.strings] Table 73 mentions nonexistent functions

Lenexa

Complete

2488

Placeholders should be allowed and encouraged to be constexpr

Lenexa

Complete

1169

num_get not fully compatible with strto*

Kona

Complete

2072

Unclear wording about capacity of temporary buffers

Kona

Complete

2101

Some transformation types can produce impossible types

Kona

Complete

2111

Which unexpected&#47;``terminate`` handler is called from the exception handling runtime?

Kona

Complete

2119

Missing hash specializations for extended integer types

Kona

Complete

2127

Move-construction with raw_storage_iterator

Kona

Complete

2133

Attitude to overloaded comma for iterators

Kona

Complete

2156

Unordered containers’ reserve(n) reserves for n-1 elements

Kona

Complete

2218

Unclear how containers use allocator_traits::construct()

Kona

Complete

2219

*INVOKE*-ing a pointer to member with a reference_wrapper as the object expression

Kona

Complete

2224

Ambiguous status of access to non-live objects

Kona

Complete

2234

assert() should allow usage in constant expressions

Kona

Complete

2244

Issue on basic_istream::seekg

Kona

Complete

2250

Follow-up On Library Issue 2207

Kona

Complete

2259

Issues in 17.6.5.5 rules for member functions

Kona

Complete

2273

regex_match ambiguity

Kona

Complete

2336

is_trivially_constructible/is_trivially_assignable traits are always false

Kona

Complete

2353

std::next is over-constrained

Kona

Complete

2367

pair and tuple are not correctly implemented for is_constructible with no args

Kona

Complete

2380

May <cstdlib> provide long ::abs(long) and long long ::abs(long long)?

Kona

Complete

2384

Allocator’s deallocate function needs better specification

Kona

Complete

2385

function::assign allocator argument doesn’t make sense

Kona

Complete

2435

reference_wrapper::operator()’s Remark should be deleted

Kona

Complete

2447

Allocators and volatile-qualified value types

Kona

Complete

2462

std::ios_base::failure is overspecified

Kona

Complete

2466

allocator_traits::max_size() default behavior is incorrect

Kona

Complete

2469

Wrong specification of Requires clause of operator[] for map and unordered_map

Kona

Complete

2473

basic_filebuf’s relation to C FILE semantics

Kona

Complete

2476

scoped_allocator_adaptor is not assignable

Kona

Complete

2477

Inconsistency of wordings in std::vector::erase() and std::deque::erase()

Kona

Complete

2483

throw_with_nested() should use is_final

Kona

Complete

2484

rethrow_if_nested() is doubly unimplementable

Kona

Complete

2485

get() should be overloaded for const tuple&&

Kona

Complete

2486

mem_fn() should be required to use perfect forwarding

Kona

Complete

2487

bind() should be const-overloaded, not cv-overloaded

Kona

Complete

2489

mem_fn() should be noexcept

Kona

Complete

2492

Clarify requirements for comp

Kona

Complete

2495

There is no such thing as an Exception Safety element

Kona

Complete

2192

Validity and return type of std::abs(0u) is unclear

Jacksonville

Complete

2276

Missing requirement on std::promise::set_exception

Jacksonville

Complete

2296

std::addressof should be constexpr

Jacksonville

Complete

2450

(greater|less|greater_equal|less_equal)<void> do not yield a total order for pointers

Jacksonville

Complete

2520

N4089 broke initializing unique_ptr<T[]> from a nullptr

Jacksonville

Complete

2522

[fund.ts.v2] Contradiction in set_default_resource specification

Jacksonville

Complete

2523

std::promise synopsis shows two set_value_at_thread_exit()’s for no apparent reason

Jacksonville

Complete

2537

Constructors for priority_queue taking allocators should call make_heap

Jacksonville

Complete

2539

[fund.ts.v2] invocation_trait definition definition doesn’t work for surrogate call functions

Jacksonville

2545

Simplify wording for bind without explicitly specified return type

Jacksonville

Complete

2557

Logical operator traits are broken in the zero-argument case

Jacksonville

Complete

2558

[fund.ts.v2] Logical operator traits are broken in the zero-argument case

Jacksonville

Complete

2559

Error in LWG 2234’s resolution

Jacksonville

Complete

2560

is_constructible underspecified when applied to a function type

Jacksonville

Broken in 3.6; See r261653.

2565

std::function’s move constructor should guarantee nothrow for reference_wrappers and function pointers

Jacksonville

Complete

2566

Requirements on the first template parameter of container adaptors

Jacksonville

Complete

2571

§[map.modifiers]/2 imposes nonsensical requirement on insert(InputIterator, InputIterator)

Jacksonville

Complete

2572

The remarks for shared_ptr::operator* should apply to cv-qualified void as well

Jacksonville

Complete

2574

[fund.ts.v2] std::experimental::function::operator=(F&&) should be constrained

Jacksonville

Complete

2575

[fund.ts.v2] experimental::function::assign should be removed

Jacksonville

2576

istream_iterator and ostream_iterator should use std::addressof

Jacksonville

Complete

2577

{shared,unique}_lock should use std::addressof

Jacksonville

Complete

2579

Inconsistency wrt Allocators in basic_string assignment vs. basic_string::assign

Jacksonville

Complete

2581

Specialization of <type_traits> variable templates should be prohibited

Jacksonville

Complete

2582

§[res.on.functions]/2’s prohibition against incomplete types shouldn’t apply to type traits

Jacksonville

Complete

2583

There is no way to supply an allocator for basic_string(str, pos)

Jacksonville

Complete

2585

forward_list::resize(size_type, const value_type&) effects incorrect

Jacksonville

Complete

2586

Wrong value category used in scoped_allocator_adaptor::construct()

Jacksonville

Complete

2590

Aggregate initialization for std::array

Jacksonville

Complete

2181

Exceptions from seed sequence operations

Oulu

Complete

2309

mutex::lock() should not throw device_or_resource_busy

Oulu

Complete

2310

Public exposition only member in std::array

Oulu

Complete

2312

tuple’s constructor constraints need to be phrased more precisely

Oulu

Complete

2328

Rvalue stream extraction should use perfect forwarding

Oulu

Complete

2393

std::function’s Callable definition is broken

Oulu

Complete

2422

std::numeric_limits<T>::is_modulo description: “most machines” errata

Oulu

Complete

2426

Issue about compare_exchange

Oulu

2436

Comparators for associative containers should always be CopyConstructible

Oulu

Complete

2441

Exact-width atomic typedefs should be provided

Oulu

Complete

2451

[fund.ts.v2] optional should ‘forward’ T’s implicit conversions

Oulu

Nothing To Do

2509

[fund.ts.v2] any_cast doesn’t work with rvalue reference targets and cannot move with a value target

Oulu

Complete

2516

[fund.ts.v2] Public “exposition only” members in observer_ptr

Oulu

2542

Missing const requirements for associative containers

Oulu

2549

Tuple EXPLICIT constructor templates that take tuple parameters end up taking references to temporaries and will create dangling references

Oulu

Complete

2550

Wording of unordered container’s clear() method complexity

Oulu

Complete

2551

[fund.ts.v2] “Exception safety” cleanup in library fundamentals required

Oulu

Complete

2555

[fund.ts.v2] No handling for over-aligned types in optional

Oulu

Complete

2573

[fund.ts.v2] std::hash<std::experimental::shared_ptr> does not work for arrays

Oulu

2596

vector::data() should use addressof

Oulu

Complete

2667

path::root_directory() description is confusing

Oulu

Complete

2669

recursive_directory_iterator effects refers to non-existent functions

Oulu

Complete

2670

system_complete refers to undefined variable ‘base’

Oulu

Complete

2671

Errors in Copy

Oulu

Complete

2673

status() effects cannot be implemented as specified

Oulu

Complete

2674

Bidirectional iterator requirement on path::iterator is very expensive

Oulu

Complete

2683

filesystem::copy() says “no effects”

Oulu

Complete

2684

priority_queue lacking comparator typedef

Oulu

Complete

2685

shared_ptr deleters must not throw on move construction

Oulu

Complete

2687

{inclusive,exclusive}_scan misspecified

Oulu

2688

clamp misses preconditions and has extraneous condition on result

Oulu

Complete

2689

Parallel versions of std::copy and std::move shouldn’t be in order

Oulu

2698

Effect of assign() on iterators/pointers/references

Oulu

Complete

2704

recursive_directory_iterator’s members should require ‘*this is dereferenceable’

Oulu

Complete

2706

Error reporting for recursive_directory_iterator::pop() is under-specified

Oulu

Complete

2707

path construction and assignment should have “string_type&&” overloads

Oulu

Complete

2709

offsetof is unnecessarily imprecise

Oulu

2710

“Effects: Equivalent to …” doesn’t count “Synchronization:” as determined semantics

Oulu

Complete

2711

path is convertible from approximately everything under the sun

Oulu

Complete

2716

Specification of shuffle and sample disallows lvalue URNGs

Oulu

Complete

2718

Parallelism bug in [algorithms.parallel.exec] p2

Oulu

2719

permissions function should not be noexcept due to narrow contract

Oulu

Complete

2720

permissions function incorrectly specified for symlinks

Oulu

Complete

2721

remove_all has incorrect post conditions

Oulu

Complete

2723

Do directory_iterator and recursive_directory_iterator become the end iterator upon error?

Oulu

Complete

2724

The protected virtual member functions of memory_resource should be private

Oulu

2725

filesystem::exists(const path&, error_code&) error reporting

Oulu

Complete

2726

[recursive_]directory_iterator::increment(error_code&) is underspecified

Oulu

Complete

2727

Parallel algorithms with constexpr specifier

Oulu

2728

status(p).permissions() and symlink_status(p).permissions() are not specified

Oulu

Complete

2062

Effect contradictions w/o no-throw guarantee of std::function swaps

Issaquah

Complete

2166

Heap property underspecified?

Issaquah

2221

No formatted output operator for nullptr

Issaquah

Complete

2223

shrink_to_fit effect on iterator validity

Issaquah

Complete

2261

Are containers required to use their ‘pointer’ type internally?

Issaquah

2394

locale::name specification unclear - what is implementation-defined?

Issaquah

Complete

2460

LWG issue 2408 and value categories

Issaquah

Complete

2468

Self-move-assignment of library types

Issaquah

2475

Allow overwriting of std::basic_string terminator with charT() to allow cleaner interoperation with legacy APIs

Issaquah

Complete

2503

multiline option should be added to syntax_option_type

Issaquah

Complete

2510

Tag types should not be DefaultConstructible

Issaquah

Complete

2514

Type traits must not be final

Issaquah

Complete

2518

[fund.ts.v2] Non-member swap for propagate_const should call member swap

Issaquah

Complete

2519

Iterator operator-= has gratuitous undefined behaviour

Issaquah

Complete

2521

[fund.ts.v2] weak_ptr’s converting move constructor should be modified as well for array support

Issaquah

2525

[fund.ts.v2] get_memory_resource should be const and noexcept

Issaquah

2527

[fund.ts.v2] ALLOCATOR_OF for function::operator= has incorrect default

Issaquah

2531

future::get should explicitly state that the shared state is released

Issaquah

2534

Constrain rvalue stream operators

Issaquah

2536

What should <complex.h> do?

Issaquah

Complete

2540

unordered_multimap::insert hint iterator

Issaquah

Complete

2543

LWG 2148 (hash support for enum types) seems under-specified

Issaquah

Complete

2544

istreambuf_iterator(basic_streambuf<charT, traits>* s) effects unclear when s is 0

Issaquah

Complete

2556

Wide contract for future::share()

Issaquah

Complete

2562

Consistent total ordering of pointers by comparison functors

Issaquah

2567

Specification of logical operator traits uses BaseCharacteristic, which is defined only for UnaryTypeTraits and BinaryTypeTraits

Issaquah

Complete

2568

[fund.ts.v2] Specification of logical operator traits uses BaseCharacteristic, which is defined only for UnaryTypeTraits and BinaryTypeTraits

Issaquah

2569

conjunction and disjunction requirements are too strict

Issaquah

Complete

2570

[fund.ts.v2] conjunction and disjunction requirements are too strict

Issaquah

2578

Iterator requirements should reference iterator traits

Issaquah

Complete

2584

<regex> ECMAScript IdentityEscape is ambiguous

Issaquah

2587

“Convertible to bool” requirement in conjunction and disjunction

Issaquah

Resolved by 2567

2588

[fund.ts.v2] “Convertible to bool” requirement in conjunction and disjunction

Issaquah

2589

match_results can’t satisfy the requirements of a container

Issaquah

Complete

2591

std::function’s member template target() should not lead to undefined behaviour

Issaquah

Complete

2598

addressof works on temporaries

Issaquah

Complete

2664

operator/ (and other append) semantics not useful if argument has root

Issaquah

Complete

2665

remove_filename() post condition is incorrect

Issaquah

Complete

2672

Should is_empty use error_code in its specification?

Issaquah

Complete

2678

std::filesystem enum classes overspecified

Issaquah

Complete

2679

Inconsistent Use of Effects and Equivalent To

Issaquah

Complete

2680

Add “Equivalent to” to filesystem

Issaquah

Complete

2681

filesystem::copy() cannot copy symlinks

Issaquah

Complete

2682

filesystem::copy() won’t create a symlink to a directory

Issaquah

Complete

2686

Why is std::hash specialized for error_code, but not error_condition?

Issaquah

Complete

2694

Application of LWG 436 accidentally deleted definition of “facet”

Issaquah

Complete

2696

Interaction between make_shared and enable_shared_from_this is underspecified

Issaquah

Nothing To Do

2699

Missing restriction in [numeric.requirements]

Issaquah

Complete

2712

copy_file(from, to, …) has a number of unspecified error conditions

Issaquah

Complete

2722

equivalent incorrectly specifies throws clause

Issaquah

Complete

2729

Missing SFINAE on std::pair::operator=

Issaquah

2732

Questionable specification of path::operator/= and path::append

Issaquah

Complete

2733

[fund.ts.v2] gcd / lcm and bool

Issaquah

Complete

2735

std::abs(short), std::abs(signed char) and others should return int instead of double in order to be compatible with C++98 and C

Issaquah

Complete

2736

nullopt_t insufficiently constrained

Issaquah

Complete

2738

is_constructible with void types

Issaquah

Complete

2739

Issue with time_point non-member subtraction with an unsigned duration

Issaquah

Complete

2740

constexpr optional<T>::operator->

Issaquah

Complete

2742

Inconsistent string interface taking string_view

Issaquah

Complete

2744

any’s in_place constructors

Issaquah

Complete

2745

[fund.ts.v2] Implementability of LWG 2451

Issaquah

Complete

2747

Possibly redundant std::move in [alg.foreach]

Issaquah

Complete

2748

swappable traits for optionals

Issaquah

Complete

2749

swappable traits for variants

Issaquah

Complete

2750

[fund.ts.v2] LWG 2451 conversion constructor constraint

Issaquah

Nothing To Do

2752

“Throws:” clauses of async and packaged_task are unimplementable

Issaquah

2755

[string.view.io] uses non-existent basic_string_view::to_string function

Issaquah

Complete

2756

C++ WP optional<T> should ‘forward’ T’s implicit conversions

Issaquah

Complete

2758

std::string{}.assign(“ABCDE”, 0, 1) is ambiguous

Issaquah

Complete

2759

gcd / lcm and bool for the WP

Issaquah

Complete

2760

non-const basic_string::data should not invalidate iterators

Issaquah

Complete

2765

Did LWG 1123 go too far?

Issaquah

Complete

2767

not_fn call_wrapper can form invalid types

Issaquah

Complete

2769

Redundant const in the return type of any_cast(const any&)

Issaquah

Complete

2771

Broken Effects of some basic_string::compare functions in terms of basic_string_view

Issaquah

Complete

2773

Making std::ignore constexpr

Issaquah

Complete

2777

basic_string_view::copy should use char_traits::copy

Issaquah

Complete

2778

basic_string_view is missing constexpr

Issaquah

Complete

2260

Missing requirement for Allocator::pointer

Kona

Complete

2676

Provide filesystem::path overloads for File-based streams

Kona

Complete

2768

any_cast and move semantics

Kona

Complete

2769

Redundant const in the return type of any_cast(const any&)

Kona

Complete

2781

Contradictory requirements for std::function and std::reference_wrapper

Kona

Complete

2782

scoped_allocator_adaptor constructors must be constrained

Kona

Complete

2784

Resolution to LWG 2484 is missing “otherwise, no effects” and is hard to parse

Kona

Complete

2785

quoted should work with basic_string_view

Kona

Complete

2786

Annex C should mention shared_ptr changes for array support

Kona

Complete

2787

§[file_status.cons] doesn’t match class definition

Kona

Complete

2788

basic_string range mutators unintentionally require a default constructible allocator

Kona

Complete

2789

Equivalence of contained objects

Kona

Complete

2790

Missing specification of istreambuf_iterator::operator->

Kona

Complete

2794

Missing requirements for allocator pointers

Kona

Nothing To Do

2795

§[global.functions] provides incorrect example of ADL use

Kona

Complete

2796

tuple should be a literal type

Kona

Complete

2801

Default-constructibility of unique_ptr

Kona

Complete

2802

shared_ptr constructor requirements for a deleter

Kona

2804

Unconditional constexpr default constructor for istream_iterator

Kona

Complete

2806

Base class of bad_optional_access

Kona

Complete

2807

std::invoke should use std::is_nothrow_callable

Kona

Complete

2812

Range access is available with <string_view>

Kona

Complete

2824

list::sort should say that the order of elements is unspecified if an exception is thrown

Kona

Complete

2826

string_view iterators use old wording

Kona

Complete

2834

Resolution LWG 2223 is missing wording about end iterators

Kona

Complete

2835

LWG 2536 seems to misspecify <tgmath.h>

Kona

Complete

2837

gcd and lcm should support a wider range of input values

Kona

Complete

2838

is_literal_type specification needs a little cleanup

Kona

Complete

2842

in_place_t check for optional::optional(U&&) should decay U

Kona

Complete

2850

std::function move constructor does unnecessary work

Kona

Complete

2853

Possible inconsistency in specification of erase in [vector.modifiers]

Kona

Complete

2855

std::throw_with_nested(“string_literal”)

Kona

Complete

2857

{variant,optional,any}::emplace should return the constructed value

Kona

Complete

2861

basic_string should require that charT match traits::char_type

Kona

Complete

2866

Incorrect derived classes constraints

Kona

Nothing To Do

2868

Missing specification of bad_any_cast::what()

Kona

Complete

2872

Add definition for direct-non-list-initialization

Kona

Complete

2873

Add noexcept to several shared_ptr related functions

Kona

Complete

2874

Constructor shared_ptr::shared_ptr(Y*) should be constrained

Kona

2875

shared_ptr::shared_ptr(Y*, D, […]) constructors should be constrained

Kona

2876

shared_ptr::shared_ptr(const weak_ptr<Y>&) constructor should be constrained

Kona

2878

Missing DefaultConstructible requirement for istream_iterator default constructor

Kona

Complete

2890

The definition of ‘object state’ applies only to class types

Kona

Complete

2900

The copy and move constructors of optional are not constexpr

Kona

Complete

2903

The form of initialization for the emplace-constructors is not specified

Kona

Complete

2904

Make variant move-assignment more exception safe

Kona

Complete

2905

is_constructible_v<unique_ptr<P, D>, P, D const &> should be false when D is not copy constructible

Kona

Complete

2908

The less-than operator for shared pointers could do more

Kona

Complete

2911

An is_aggregate type trait is needed

Kona

Complete

2921

packaged_task and type-erased allocators

Kona

Complete

2934

optional<const T> doesn’t compare with T

Kona

Complete

2901

Variants cannot properly support allocators

Toronto

Complete

2955

to_chars / from_chars depend on std::string

Toronto

Resolved by P0682R1

2956

filesystem::canonical() still defined in terms of absolute(p, base)

Toronto

Complete

Last Updated: 17-Nov-2020