# libc++ C++1z Status

In November 2014, the C++ standard committee created a draft for the next version of the C++ standard, known here as "C++1z" (probably to be C++17)

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

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 |  |
N4169 | LWG | A proposal to add invoke function template | Urbana | Complete | 3.7
N4190 | LWG | Removing auto_ptr, random_shuffle(), And Old Stuff. | Urbana |  |
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 |  |
N4387 | LWG | improving pair and tuple | Lenexa |  |
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 |  |
P0074R0 | LWG | Making `std::owner_less` more flexible | Kona | Complete | 3.8
P0013R1 | LWG | Logical type traits rev 2 | Kona | Complete | 3.8

### Library Working group Issues Status

Issue # | Issue Name | Meeting | Status
--- | --- | --- | ---
2016 | Allocators must be no-throw swappable | Urbana |
2118 | `unique_ptr` for array does not support cv qualification conversion of actual argument | Urbana | Will be resolved by N4089
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 |
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 | `common_type` is waiting on LWG#2465
2106 | `move_iterator` wrapping iterators returning prvalues | Urbana |
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 |
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 |
1169 | `num_get` not fully compatible with `strto*` | Kona |
2072 | Unclear wording about capacity of temporary buffers | Kona | Complete
2101 | Some transformation types can produce impossible types | Kona |
2111 | Which `unexpected`/`terminate` handler is called from the exception handling runtime? | Kona | Complete
2119 | Missing `hash` specializations for extended integer types | Kona |
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 |
2219 | `INVOKE`-ing a pointer to member with a `reference_wrapper` as the object expression | Kona |
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 |
2259 | Issues in 17.6.5.5 rules for member functions | Kona | Complete
2273 | `regex_match` ambiguity | Kona |
2336 | `is_trivially_constructible/is_trivially_assignable` traits are always false | Kona |
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 |
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 |
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 | Completed
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

Last Updated: 5-Oct-2015