libc++ C++14 Status¶
Overview¶
In April 2013, the C++ standard committee approved the draft for the next version of the C++ standard, initially known as “C++1y”.
The draft standard includes papers and issues that were voted on at the previous three meetings (Kona, Portland, and Bristol).
In August 2014, this draft was approved by ISO as C++14.
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:
CWG - Core Language Working group
LWG - Library working group
SG1 - Study group #1 (Concurrency working group)
Paper Status¶
Paper # |
Group |
Paper Name |
Meeting |
Status |
First released version |
---|---|---|---|---|---|
LWG |
Terminology for Container Element Requirements - Rev 1 |
Kona |
Complete |
3.4 |
|
LWG |
Making Operator Functors greater<> |
Portland |
Complete |
3.4 |
|
LWG |
std::result_of and SFINAE |
Portland |
Complete |
3.4 |
|
LWG |
Constexpr Library Additions: chrono, v3 |
Portland |
Complete |
3.4 |
|
LWG |
Constexpr Library Additions: containers, v2 |
Portland |
Complete |
3.4 |
|
LWG |
Constexpr Library Additions: utilities, v3 |
Portland |
Complete |
3.4 |
|
LWG |
Constexpr Library Additions: complex, v2 |
Portland |
Complete |
3.4 |
|
LWG |
An Incremental Improvement to integral_constant |
Bristol |
Complete |
3.4 |
|
LWG |
Null Forward Iterators |
Bristol |
Complete |
3.4 |
|
LWG |
std::exchange() |
Bristol |
Complete |
3.4 |
|
LWG |
Compile-time integer sequences |
Bristol |
Complete |
3.4 |
|
LWG |
Addressing Tuples by Type |
Bristol |
Complete |
3.4 |
|
LWG |
Making non-modifying sequence operations more robust |
Bristol |
Complete |
3.4 |
|
LWG |
make_unique |
Bristol |
Complete |
3.4 |
|
LWG |
Quoted Strings |
Bristol |
Complete |
3.4 |
|
LWG |
User-defined Literals |
Bristol |
Complete |
3.4 |
|
LWG |
TransformationTraits Redux (excluding part 4) |
Bristol |
Complete |
3.4 |
|
LWG |
Adding heterogeneous comparison lookup to associative containers |
Bristol |
Complete |
3.4 |
|
LWG |
A proposal to add a utility class to represent optional objects |
Bristol |
Removed from Draft Standard |
n/a |
|
LWG |
Fixing constexpr member functions without const |
Bristol |
Complete |
3.4 |
|
LWG |
C++ Dynamic Arrays (dynarray) |
Bristol |
Removed from Draft Standard |
n/a |
|
SG1 |
Shared Locking in C++ |
Bristol |
Complete |
3.4 |
|
LWG |
User-defined Literals for std::complex |
Chicago |
Complete |
3.4 |
|
LWG |
Constexpr Library Additions: functional |
Chicago |
Complete |
3.4 |
|
LWG |
Discouraging rand() in C++14 |
Issaquah |
Complete |
3.5 |
|
LWG |
Consistent Metafunction Aliases |
Issaquah |
Complete |
3.5 |
|
SG1 |
A proposal to rename shared_mutex to shared_timed_mutex |
Issaquah |
Complete |
3.5 |
Library Working Group Issues Status¶
Issue # |
Issue Name |
Meeting |
Status |
---|---|---|---|
Insufficient/inconsistent key immutability requirements for associative containers |
Kona |
Complete |
|
Reporting out-of-bound values on numeric string conversions |
Kona |
Complete |
|
|
Kona |
Complete |
|
Incorrect pre-conditions for some type traits |
Kona |
Complete |
|
Further incorrect usages of result_of |
Kona |
Complete |
|
messages_base::catalog overspecified |
Kona |
Complete |
|
Preconditions of reserve, shrink_to_fit, and resize functions |
Kona |
Complete |
|
Issues with std::reverse and std::copy_if |
Kona |
Complete |
|
No definition of “Stable” for copy algorithms |
Kona |
Complete |
|
forward_list::merge and forward_list::splice_after with unequal allocators |
Kona |
Complete |
|
Incorrect “mixed” move-assignment semantics of unique_ptr |
Kona |
Complete |
|
Unordered associative containers do not use allocator_traits to define member types |
Kona |
Complete |
|
Errors in regex bitmask types |
Kona |
Complete |
|
make_move_iterator and arrays |
Kona |
Complete |
|
More noexcept issues in basic_string |
Kona |
Complete |
|
Minimal allocator interface |
Kona |
Complete |
|
packaged_task should have deleted copy c’tor with const parameter |
Kona |
Complete |
|
Inconsistent exception spec for basic_string move constructor |
Kona |
Complete |
|
Incorrect constraints of future::get in regard to MoveAssignable |
Kona |
Complete |
|
Why is std::launch an implementation-defined type? |
Kona |
Complete |
|
std::valarray move-assignment |
Portland |
Complete |
|
Off by one error in std::reverse_copy |
Portland |
Complete |
|
Allocator requirements should include CopyConstructible |
Portland |
Complete |
|
const-qualification on weak_ptr::owner_before |
Portland |
Complete |
|
Overly generic type support for math functions |
Portland |
Complete |
|
Unnecessary constraints of va_start() usage |
Portland |
Complete |
|
std::allocator_traits<std::allocator<T>>::propagate_on_container_move_assignment |
Portland |
Complete |
|
Inconsistent requirements on |
Portland |
Complete |
|
remove can’t swap but note says it might |
Portland |
Complete |
|
merge() allocator requirements for lists versus forward lists |
Portland |
Complete |
|
unordered_map::insert(T&&) protection should apply to map too |
Portland |
Complete |
|
Unexpected output required of strings |
Portland |
Complete |
|
Unnecessary mem_fn overloads |
Portland |
Complete |
|
|
Portland |
Complete |
|
future_errc enums start with value 0 (invalid value for broken_promise) |
Portland |
Complete |
|
valarray and begin/end |
Portland |
Complete |
|
Misplaced effect in m.try_lock_for() |
Bristol |
Complete |
|
Vague Wording for condition_variable_any |
Bristol |
Complete |
|
Throws clause of condition_variable::wait with predicate |
Bristol |
Complete |
|
duration conversion overflow shouldn’t participate in overload resolution |
Bristol |
Complete |
|
merge() stability for lists versus forward lists |
Bristol |
Complete |
|
Absence of global functions cbegin/cend |
Bristol |
Complete |
|
error_category default constructor |
Bristol |
Complete |
|
Unclear hint type in Allocator’s allocate function |
Bristol |
Complete |
|
Hashing enums should be supported directly by std::hash |
Bristol |
Complete |
|
Concerns about 20.8/5 |
Bristol |
Complete |
|
allocator_traits::max_size missing noexcept |
Bristol |
Complete |
|
nth_element requires inconsistent post-conditions |
Bristol |
Complete |
|
Missing reset() requirements in unique_ptr specialization |
Bristol |
Complete |
|
Does |
Bristol |
Complete |
|
Specify when once_flag becomes invalid |
Bristol |
Complete |
|
promise throws clauses |
Bristol |
Complete |
|
Incorrect requirements for hash specializations |
Bristol |
Complete |
|
missing ordering constraints for fences |
Bristol |
Complete |
|
atomic_flag::clear ordering constraints |
Bristol |
Complete |
|
notify_all_at_thread_exit synchronization |
Bristol |
Complete |
|
Missing noexcept specification in type_index |
Bristol |
Complete |
|
wstring_convert::converted() should be noexcept |
Bristol |
Complete |
|
string_convert and wbuffer_convert validity |
Bristol |
Complete |
|
Special members for wstring_convert and wbuffer_convert |
Bristol |
Complete |
|
Requirements on Copy/MoveInsertable |
Bristol |
Complete |
|
Missing throws clause for future/shared_future::wait_for/wait_until |
Bristol |
Complete |
|
vector<bool> is missing emplace and emplace_back member functions |
Bristol |
Complete |
|
ordering of condition variable operations, reflects Posix discussion |
Bristol |
Complete |
|
Specification of |
Bristol |
Complete |
|
Specification of |
Bristol |
Complete |
|
Data race avoidance for all containers, not only for sequences |
Bristol |
Complete |
|
scoped_allocator_adaptor uses wrong argument types for piecewise construction |
Bristol |
Complete |
|
basic_string::at should not have a Requires clause |
Bristol |
Complete |
|
assign() overspecified for sequence containers |
Bristol |
Complete |
|
Missing allocator-extended constructor for allocator-aware containers |
Bristol |
Complete |
|
Replace ambiguous use of “Allocator” in container requirements |
Bristol |
Complete |
|
Inconsistency in description of forward_list::splice_after single-element overload |
Bristol |
Complete |
|
Unrealistic header inclusion checks required |
Bristol |
Complete |
|
Standard code conversion facets underspecified |
Bristol |
Complete |
|
DR 704 removes complexity guarantee for clear() |
Bristol |
Complete |
|
Undefined behavior without proper requirements on basic_string constructors |
Bristol |
Complete |
|
common_type trait produces reference types |
Chicago |
Complete |
|
unique_ptr assignment effects w.r.t. deleter |
Chicago |
Complete |
|
Type traits and std::nullptr_t |
Chicago |
Complete |
|
Wrong description of effect 1 of basic_istream::ignore |
Chicago |
Complete |
|
iostream_category() and noexcept |
Chicago |
Complete |
|
ios_base::xalloc should be thread-safe |
Chicago |
Complete |
|
Unclear specification of find_end |
Chicago |
Complete |
|
Exceptions from std::seed_seq operations |
Chicago |
Complete |
|
Impossible container requirements for adaptor types |
Chicago |
Complete |
|
Do library implementers have the freedom to add constexpr? |
Chicago |
Complete |
|
regex_traits::isctype Returns clause is wrong |
Chicago |
Complete |
|
Throw specification of async() incomplete |
Chicago |
Complete |
|
packaged_task constructors should be constrained |
Chicago |
Complete |
|
Timed waiting functions cannot timeout if launch::async policy used |
Chicago |
Complete |
|
What should async do if neither ‘async’ nor ‘deferred’ is set in policy? |
Chicago |
Complete |
|
atomic_flag initialization |
Chicago |
Complete |
|
Why is forward_as_tuple not constexpr? |
Chicago |
Complete |
|
Inconsistency in allocator_traits::max_size |
Chicago |
Complete |
|
|
Chicago |
Complete |
|
Redundant sections for map and multimap members should be removed |
Chicago |
Complete |
|
NB comment: GB9 |
Remove gets from C++14 |
Chicago |
Complete |
Unclear requirement for exceptions thrown in condition_variable::wait() |
Issaquah |
Complete |
|
std::hash is vulnerable to collision DoS attack |
Issaquah |
Complete |
|
packaged_task::operator() synchronization too broad? |
Issaquah |
Complete |
|
Probable misuse of term “function scope” in [thread.condition] |
Issaquah |
Complete |
|
Strong guarantee on vector::push_back() still broken with C++11? |
Issaquah |
Complete |
|
Simplify container requirements with the new algorithms |
Issaquah |
Complete |
|
Setting a default argument in the declaration of a member function assign of std::basic_string |
Issaquah |
Complete |
|
regex_traits::lookup_classname specification unclear |
Issaquah |
Complete |
|
quoted should use char_traits::eq for character comparison |
Issaquah |
Complete |
|
User-defined literals for Standard Library types |
Issaquah |
Complete |
|
begin / end for arrays should be constexpr and noexcept |
Issaquah |
Complete |
|
make_reverse_iterator |
Issaquah |
Complete |
|
Effects of inaccessible |
Issaquah |
Complete |
|
Contradiction in regex_constants |
Issaquah |
Complete |
|
String exception inconsistency in erase. |
Issaquah |
Complete |
|
User-defined classes that cannot be derived from |
Issaquah |
Complete |
|
std::function ambiguity |
Issaquah |
Complete |
|
|
Issaquah |
Complete |
|
Reverse iterator does not fully support targets that overload operator& |
Issaquah |
Complete |
|
Default constructors for standard library containers are explicit |
Issaquah |
Complete |
|
Problematic postconditions of regex_match and regex_search |
Issaquah |
Complete |
|
Return value of std::regex_replace |
Issaquah |
Complete |
|
a.erase(q1, q2) unable to directly return q2 |
Issaquah |
Complete |
|
Comparing iterators and allocator pointers with different const-character |
Issaquah |
Complete |
|
Wrong facet used by num_put::do_put |
Issaquah |
Complete |
|
Why is std::tie not constexpr? |
Issaquah |
Complete |
|
Complexity of count in unordered associative containers |
Issaquah |
Complete |
|
match_results::reference should be value_type&, not const value_type& |
Issaquah |
Complete |
|
Clarify container destructor requirements w.r.t. std::array |
Issaquah |
Complete |
|
tuple_size should always derive from integral_constant<size_t, N> |
Issaquah |
Complete |
|
apply() should return decltype(auto) and use decay_t before tuple_size |
Issaquah |
Complete |
|
weak_ptr should be movable |
Issaquah |
Complete |
|
weak_ptr::lock() should be atomic |
Issaquah |
Complete |
|
The type property queries should be UnaryTypeTraits returning size_t |
Issaquah |
Complete |
|
select_on_container_copy_construction() takes allocators, not containers |
Issaquah |
Complete |
|
Associative(initializer_list, stuff) constructors are underspecified |
Issaquah |
Complete |
|
vector::resize(n, t)’s specification should be simplified |
Issaquah |
Complete |
|
Insert iterator constructors should use addressof() |
Issaquah |
Complete |
|
regex_match()/regex_search() with match_results should forbid temporary strings |
Issaquah |
Complete |
|
regex(“meow”, regex::icase) is technically forbidden but should be permitted |
Issaquah |
Complete |
|
regex_iterator/regex_token_iterator should forbid temporary regexes |
Issaquah |
Complete |
|
Wording issue in nth_element |
Issaquah |
Complete |
|
Inconsistency between basic_ostream::seekp(pos) and basic_ostream::seekp(off, dir) |
Issaquah |
Complete |
|
quoted()’s interaction with padding is unclear |
Issaquah |
Complete |
|
integral_constant’s member functions should be marked noexcept |
Issaquah |
Complete |
|
min, max, and minmax should be constexpr |
Issaquah |
Complete |
|
Stability of erasure in unordered associative containers |
Issaquah |
Complete |
|
Remaining “Assignable” requirement |
Issaquah |
Complete |
|
How does regex_constants::nosubs affect basic_regex::mark_count()? |
Issaquah |
Complete |
|
|
Issaquah |
Complete |
|
unique_lock move-assignment should not be noexcept |
Issaquah |
Complete |
|
Incomplete action on async/launch::deferred |
Issaquah |
Complete |
|
Progress guarantees, lock-free property, and scheduling assumptions |
Issaquah |
Complete |
|
Inconsistent requirements for shared mutexes |
Issaquah |
Complete |