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

3346

LWG

Terminology for Container Element Requirements - Rev 1

Kona

Complete

3.4

3421

LWG

Making Operator Functors greater<>

Portland

Complete

3.4

3462

LWG

std::result_of and SFINAE

Portland

Complete

3.4

3469

LWG

Constexpr Library Additions: chrono, v3

Portland

Complete

3.4

3470

LWG

Constexpr Library Additions: containers, v2

Portland

Complete

3.4

3471

LWG

Constexpr Library Additions: utilities, v3

Portland

Complete

3.4

3302

LWG

Constexpr Library Additions: complex, v2

Portland

Complete

3.4

3545

LWG

An Incremental Improvement to integral_constant

Bristol

Complete

3.4

3644

LWG

Null Forward Iterators

Bristol

Complete

3.4

3668

LWG

std::exchange()

Bristol

Complete

3.4

3658

LWG

Compile-time integer sequences

Bristol

Complete

3.4

3670

LWG

Addressing Tuples by Type

Bristol

Complete

3.4

3671

LWG

Making non-modifying sequence operations more robust

Bristol

Complete

3.4

3656

LWG

make_unique

Bristol

Complete

3.4

3654

LWG

Quoted Strings

Bristol

Complete

3.4

3642

LWG

User-defined Literals

Bristol

Complete

3.4

3655

LWG

TransformationTraits Redux (excluding part 4)

Bristol

Complete

3.4

3657

LWG

Adding heterogeneous comparison lookup to associative containers

Bristol

Complete

3.4

3672

LWG

A proposal to add a utility class to represent optional objects

Bristol

Removed from Draft Standard

n/a

3669

LWG

Fixing constexpr member functions without const

Bristol

Complete

3.4

3662

LWG

C++ Dynamic Arrays (dynarray)

Bristol

Removed from Draft Standard

n/a

3659

SG1

Shared Locking in C++

Bristol

Complete

3.4

3779

LWG

User-defined Literals for std::complex

Chicago

Complete

3.4

3789

LWG

Constexpr Library Additions: functional

Chicago

Complete

3.4

3924

LWG

Discouraging rand() in C++14

Issaquah

Complete

3.5

3887

LWG

Consistent Metafunction Aliases

Issaquah

Complete

3.5

3891

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

1214

Insufficient/inconsistent key immutability requirements for associative containers

Kona

Complete

2009

Reporting out-of-bound values on numeric string conversions

Kona

Complete

2010

is_* traits for binding operations can’t be meaningfully specialized

Kona

Complete

2015

Incorrect pre-conditions for some type traits

Kona

Complete

2021

Further incorrect usages of result_of

Kona

Complete

2028

messages_base::catalog overspecified

Kona

Complete

2033

Preconditions of reserve, shrink_to_fit, and resize functions

Kona

Complete

2039

Issues with std::reverse and std::copy_if

Kona

Complete

2044

No definition of “Stable” for copy algorithms

Kona

Complete

2045

forward_list::merge and forward_list::splice_after with unequal allocators

Kona

Complete

2047

Incorrect “mixed” move-assignment semantics of unique_ptr

Kona

Complete

2050

Unordered associative containers do not use allocator_traits to define member types

Kona

Complete

2053

Errors in regex bitmask types

Kona

Complete

2061

make_move_iterator and arrays

Kona

Complete

2064

More noexcept issues in basic_string

Kona

Complete

2065

Minimal allocator interface

Kona

Complete

2067

packaged_task should have deleted copy c’tor with const parameter

Kona

Complete

2069

Inconsistent exception spec for basic_string move constructor

Kona

Complete

2096

Incorrect constraints of future::get in regard to MoveAssignable

Kona

Complete

2102

Why is std::launch an implementation-defined type?

Kona

Complete

2071

std::valarray move-assignment

Portland

Complete

2074

Off by one error in std::reverse_copy

Portland

Complete

2081

Allocator requirements should include CopyConstructible

Portland

Complete

2083

const-qualification on weak_ptr::owner_before

Portland

Complete

2086

Overly generic type support for math functions

Portland

Complete

2099

Unnecessary constraints of va_start() usage

Portland

Complete

2103

std::allocator_traits<std::allocator<T>>::propagate_on_container_move_assignment

Portland

Complete

2105

Inconsistent requirements on const_iterator’s value_type

Portland

Complete

2110

remove can’t swap but note says it might

Portland

Complete

2123

merge() allocator requirements for lists versus forward lists

Portland

Complete

2005

unordered_map::insert(T&&) protection should apply to map too

Portland

Complete

2011

Unexpected output required of strings

Portland

Complete

2048

Unnecessary mem_fn overloads

Portland

Complete

2049

is_destructible is underspecified

Portland

Complete

2056

future_errc enums start with value 0 (invalid value for broken_promise)

Portland

Complete

2058

valarray and begin/end

Portland

Complete

2091

Misplaced effect in m.try_lock_for()

Bristol

Complete

2092

Vague Wording for condition_variable_any

Bristol

Complete

2093

Throws clause of condition_variable::wait with predicate

Bristol

Complete

2094

duration conversion overflow shouldn’t participate in overload resolution

Bristol

Complete

2122

merge() stability for lists versus forward lists

Bristol

Complete

2128

Absence of global functions cbegin/cend

Bristol

Complete

2145

error_category default constructor

Bristol

Complete

2147

Unclear hint type in Allocator’s allocate function

Bristol

Complete

2148

Hashing enums should be supported directly by std::hash

Bristol

Complete

2149

Concerns about 20.8/5

Bristol

Complete

2162

allocator_traits::max_size missing noexcept

Bristol

Complete

2163

nth_element requires inconsistent post-conditions

Bristol

Complete

2169

Missing reset() requirements in unique_ptr specialization

Bristol

Complete

2172

Does atomic_compare_exchange_* accept v == nullptr arguments?

Bristol

Complete

2080

Specify when once_flag becomes invalid

Bristol

Complete

2098

promise throws clauses

Bristol

Complete

2109

Incorrect requirements for hash specializations

Bristol

Complete

2130

missing ordering constraints for fences

Bristol

Complete

2138

atomic_flag::clear ordering constraints

Bristol

Complete

2140

notify_all_at_thread_exit synchronization

Bristol

Complete

2144

Missing noexcept specification in type_index

Bristol

Complete

2174

wstring_convert::converted() should be noexcept

Bristol

Complete

2175

string_convert and wbuffer_convert validity

Bristol

Complete

2176

Special members for wstring_convert and wbuffer_convert

Bristol

Complete

2177

Requirements on Copy/MoveInsertable

Bristol

Complete

2185

Missing throws clause for future/shared_future::wait_for/wait_until

Bristol

Complete

2187

vector<bool> is missing emplace and emplace_back member functions

Bristol

Complete

2190

ordering of condition variable operations, reflects Posix discussion

Bristol

Complete

2196

Specification of is_*[copy/move]_[constructible/assignable] unclear for non-referencable types

Bristol

Complete

2197

Specification of is_[un]signed unclear for non-arithmetic types

Bristol

Complete

2200

Data race avoidance for all containers, not only for sequences

Bristol

Complete

2203

scoped_allocator_adaptor uses wrong argument types for piecewise construction

Bristol

Complete

2207

basic_string::at should not have a Requires clause

Bristol

Complete

2209

assign() overspecified for sequence containers

Bristol

Complete

2210

Missing allocator-extended constructor for allocator-aware containers

Bristol

Complete

2211

Replace ambiguous use of “Allocator” in container requirements

Bristol

Complete

2222

Inconsistency in description of forward_list::splice_after single-element overload

Bristol

Complete

2225

Unrealistic header inclusion checks required

Bristol

Complete

2229

Standard code conversion facets underspecified

Bristol

Complete

2231

DR 704 removes complexity guarantee for clear()

Bristol

Complete

2235

Undefined behavior without proper requirements on basic_string constructors

Bristol

Complete

2141

common_type trait produces reference types

Chicago

Complete

2246

unique_ptr assignment effects w.r.t. deleter

Chicago

Complete

2247

Type traits and std::nullptr_t

Chicago

Complete

2085

Wrong description of effect 1 of basic_istream::ignore

Chicago

Complete

2087

iostream_category() and noexcept

Chicago

Complete

2143

ios_base::xalloc should be thread-safe

Chicago

Complete

2150

Unclear specification of find_end

Chicago

Complete

2180

Exceptions from std::seed_seq operations

Chicago

Complete

2194

Impossible container requirements for adaptor types

Chicago

Complete

2013

Do library implementers have the freedom to add constexpr?

Chicago

Complete

2018

regex_traits::isctype Returns clause is wrong

Chicago

Complete

2078

Throw specification of async() incomplete

Chicago

Complete

2097

packaged_task constructors should be constrained

Chicago

Complete

2100

Timed waiting functions cannot timeout if launch::async policy used

Chicago

Complete

2120

What should async do if neither ‘async’ nor ‘deferred’ is set in policy?

Chicago

Complete

2159

atomic_flag initialization

Chicago

Complete

2275

Why is forward_as_tuple not constexpr?

Chicago

Complete

2284

Inconsistency in allocator_traits::max_size

Chicago

Complete

2298

is_nothrow_constructible is always false because of create<>

Chicago

Complete

2300

Redundant sections for map and multimap members should be removed

Chicago

Complete

NB comment: GB9

Remove gets from C++14

Chicago

Complete

2135

Unclear requirement for exceptions thrown in condition_variable::wait()

Issaquah

Complete

2291

std::hash is vulnerable to collision DoS attack

Issaquah

Complete

2142

packaged_task::operator() synchronization too broad?

Issaquah

Complete

2240

Probable misuse of term “function scope” in [thread.condition]

Issaquah

Complete

2252

Strong guarantee on vector::push_back() still broken with C++11?

Issaquah

Complete

2257

Simplify container requirements with the new algorithms

Issaquah

Complete

2268

Setting a default argument in the declaration of a member function assign of std::basic_string

Issaquah

Complete

2271

regex_traits::lookup_classname specification unclear

Issaquah

Complete

2272

quoted should use char_traits::eq for character comparison

Issaquah

Complete

2278

User-defined literals for Standard Library types

Issaquah

Complete

2280

begin / end for arrays should be constexpr and noexcept

Issaquah

Complete

2285

make_reverse_iterator

Issaquah

Complete

2299

Effects of inaccessible key_compare::is_transparent type are not clear

Issaquah

Complete

1450

Contradiction in regex_constants

Issaquah

Complete

2003

String exception inconsistency in erase.

Issaquah

Complete

2112

User-defined classes that cannot be derived from

Issaquah

Complete

2132

std::function ambiguity

Issaquah

Complete

2182

Container::[const_]reference types are misleadingly specified

Issaquah

Complete

2188

Reverse iterator does not fully support targets that overload operator&

Issaquah

Complete

2193

Default constructors for standard library containers are explicit

Issaquah

Complete

2205

Problematic postconditions of regex_match and regex_search

Issaquah

Complete

2213

Return value of std::regex_replace

Issaquah

Complete

2258

a.erase(q1, q2) unable to directly return q2

Issaquah

Complete

2263

Comparing iterators and allocator pointers with different const-character

Issaquah

Complete

2293

Wrong facet used by num_put::do_put

Issaquah

Complete

2301

Why is std::tie not constexpr?

Issaquah

Complete

2304

Complexity of count in unordered associative containers

Issaquah

Complete

2306

match_results::reference should be value_type&, not const value_type&

Issaquah

Complete

2308

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

Issaquah

Complete

2313

tuple_size should always derive from integral_constant<size_t, N>

Issaquah

Complete

2314

apply() should return decltype(auto) and use decay_t before tuple_size

Issaquah

Complete

2315

weak_ptr should be movable

Issaquah

Complete

2316

weak_ptr::lock() should be atomic

Issaquah

Complete

2317

The type property queries should be UnaryTypeTraits returning size_t

Issaquah

Complete

2320

select_on_container_copy_construction() takes allocators, not containers

Issaquah

Complete

2322

Associative(initializer_list, stuff) constructors are underspecified

Issaquah

Complete

2323

vector::resize(n, t)’s specification should be simplified

Issaquah

Complete

2324

Insert iterator constructors should use addressof()

Issaquah

Complete

2329

regex_match()/regex_search() with match_results should forbid temporary strings

Issaquah

Complete

2330

regex(“meow”, regex::icase) is technically forbidden but should be permitted

Issaquah

Complete

2332

regex_iterator/regex_token_iterator should forbid temporary regexes

Issaquah

Complete

2339

Wording issue in nth_element

Issaquah

Complete

2341

Inconsistency between basic_ostream::seekp(pos) and basic_ostream::seekp(off, dir)

Issaquah

Complete

2344

quoted()’s interaction with padding is unclear

Issaquah

Complete

2346

integral_constant’s member functions should be marked noexcept

Issaquah

Complete

2350

min, max, and minmax should be constexpr

Issaquah

Complete

2356

Stability of erasure in unordered associative containers

Issaquah

Complete

2357

Remaining “Assignable” requirement

Issaquah

Complete

2359

How does regex_constants::nosubs affect basic_regex::mark_count()?

Issaquah

Complete

2360

reverse_iterator::operator*() is unimplementable

Issaquah

Complete

2104

unique_lock move-assignment should not be noexcept

Issaquah

Complete

2186

Incomplete action on async/launch::deferred

Issaquah

Complete

2075

Progress guarantees, lock-free property, and scheduling assumptions

Issaquah

Complete

2288

Inconsistent requirements for shared mutexes

Issaquah

Complete