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 | 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 | 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 | Complete (ABI V2 Only) | 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 | ||
P0218R1 | LWG | Adopt the File System TS for C++17 | Jacksonville | ||
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 | ||
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 | ||
p0040r3 | LWG | Extending memory management tools | Oulu | ||
p0063r3 | LWG | C++17 should refer to C11 instead of C99 | Oulu | ||
p0067r3 | LWG | Elementary string conversions | Oulu | Postponed to Issaquah | |
p0083r3 | LWG | Splicing Maps and Sets | Oulu | ||
p0084r2 | LWG | Emplace Return Type | Oulu | ||
p0088r3 | LWG | Variant: a type-safe union for C++17 | Oulu | ||
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 | ||
p0181r1 | LWG | Ordered by Default | Oulu | ||
p0209r2 | LWG | make_from_tuple: apply for construction | Oulu | Complete | 3.9 |
p0219r1 | LWG | Relative Paths for Filesystem | Oulu | ||
p0254r2 | LWG | Integrating std::string_view and std::string | Oulu | ||
p0258r2 | LWG | has_unique_object_representations | Oulu | ||
p0295r0 | LWG | Adopt Selected Library Fundamentals V2 Components for C++17 | Oulu | ||
p0302r1 | LWG | Removing Allocator Support in std::function | Oulu | ||
p0307r2 | LWG | Making Optional Greater Equal Again | Oulu | ||
p0336r1 | LWG | Better Names for Parallel Execution Policies in C++17 | Oulu | ||
p0337r0 | LWG | Delete operator= for polymorphic_allocator | Oulu | ||
p0346r1 | LWG | A <random> Nomenclature Tweak | Oulu | ||
p0358r1 | LWG | Fixes for not_fn | Oulu | ||
p0371r1 | LWG | Temporarily discourage memory_order_consume | Oulu | ||
p0392r0 | LWG | Adapting string_view by filesystem paths | Oulu | ||
p0393r3 | LWG | Making Variant Greater Equal | Oulu | ||
P0394r4 | LWG | Hotel Parallelifornia: terminate() for Parallel Algorithms Exception Handling | Oulu |
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 | common_type is waiting on LWG#2465 |
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 | 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 | 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 | |
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 | |
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_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 | |
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 | |
2393 | std::function's Callable definition is broken | Oulu | |
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 | |
2509 | [fund.ts.v2] any_cast doesn't work with rvalue reference targets and cannot move with a value target | Oulu | |
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 | |
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 | |
2716 | Specification of shuffle and sample disallows lvalue URNGs | Oulu | |
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 | |
2727 | Parallel algorithms with constexpr specifier | Oulu | |
2728 | status(p).permissions() and symlink_status(p).permissions() are not specified | Oulu | Complete |
Last Updated: 12-Jul-2016