# libc++ C++17 Status

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.

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

The groups that have contributed papers:

- LWG - Library working group
- CWG - Core Language Working group
- SG1 - Study group #1 (Concurrency working group)

### 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 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 |  |
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 | Partially done |
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 |  |
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 | 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 | 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

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

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

[ Note: "Nothing to do" means that no library changes were needed to implement this change -- end note]

### Library Working group Issues Status

Issue # | Issue Name | Meeting | Status
--- | --- | --- | ---
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 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 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`/`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 (Clang Only)
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_wrapper`s 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 |
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 |
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 |
2510 | Tag types should not be DefaultConstructible | Issaquah |
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* 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 | ECMAScript IdentityEscape is ambiguous | Issaquah |
2587 | "Convertible to bool" requirement in conjunction and disjunction | Issaquah |
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 |
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::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 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: 3-Jul-2019