C++ standard libraries extensions, version 2

From cppreference.com

Version 2 of the C++ Extensions for Library Fundamentals, ISO/IEC TS 19568:2017, defines the following new components for the C++ standard library, in addition to those defined in version 1:


The C++ detection idiom

Defined in header <experimental/type_traits>
Alias templates that detect whether a template-id is well-formed
(alias template)
Class type returned by detected_t on failure
(class)

A const-propagating wrapper for pointer-like objects

Defined in header <experimental/propagate_const>
A const-propagating wrapper for pointer-like objects
(class template)

Non-owning pointers

Defined in header <experimental/memory>
A class representing a non-owning pointer
(class template)

std::array creation

Defined in header <experimental/array>
Creates a std::array object whose size and optionally element type are deduced from the arguments
(function template)
Creates a std::array object from a built-in array
(function template)

ostream_joiner

Defined in header <experimental/iterator>
An output iterator that writes successive elements into an output stream, separating adjacent elements with a delimiter
(class template)

Simple random number generation facilities

A per-thread engine of type std::default_random_engine, initialized to an unpredictable state, is maintained for each thread and used by the functions below.

Defined in header <experimental/random>
generates a random integer in the specified range
(function template)
reseeds the per-thread random engine
(function)
Defined in header <experimental/algorithm>
selects n random elements from a sequence
(function template)
randomly re-orders elements in a range
(function template)

Source code information capture

Defined in header <experimental/source_location>
A class representing information about the source code, such as file names, line numbers, and function names
(class)

Feature test macros

Defined in header <experimental/type_traits>
__cpp_lib_experimental_logical_traits
a value of at least 201511 indicates that the logical operator type traits are supported
(macro constant)
__cpp_lib_experimental_detect
a value of at least 201505 indicates that the detection idiom is supported
(macro constant)
Defined in header <experimental/propagate_const>
__cpp_lib_experimental_propagate_const
a value of at least 201505 indicates that propagate_const is supported
(macro constant)
Defined in header <experimental/functional>
__cpp_lib_experimental_not_fn
a value of at least 201406 indicates that not_fn is supported
(macro constant)
Defined in header <experimental/memory>
__cpp_lib_experimental_observer_ptr
a value of at least 201411 indicates that observer_ptr is supported
(macro constant)
Defined in header <experimental/array>
__cpp_lib_experimental_make_array
a value of at least 201505 indicates that make_array is supported
(macro constant)
Defined in header <experimental/iterator>
__cpp_lib_experimental_ostream_joiner
a value of at least 201411 indicates that ostream_joiner is supported
(macro constant)
Defined in header <experimental/vector>
__cpp_lib_experimental_erase_if
a value of at least 201411 indicates that uniform container erasure is supported
(macro constant)
Defined in header <experimental/numeric>
__cpp_lib_experimental_gcd_lcm
a value of at least 201411 indicates that gcd and lcm are supported
(macro constant)
Defined in header <experimental/random>
__cpp_lib_experimental_randint
a value of at least 201511 indicates that randint and related functions are supported
(macro constant)
Defined in header <experimental/source_location>
__cpp_lib_experimental_source_location
a value of at least 201505 indicates that source_location is supported
(macro constant)

Merged into C++17

The following components of the library fundamentals v2 have been adopted into the C++17 standard.

Defined in header <experimental/type_traits>
variadic alias template for void
(alias template)
Defined in header <experimental/type_traits>
variadic logical AND metafunction
(class template)
variadic logical OR metafunction
(class template)
logical NOT metafunction
(class template)
Defined in header <experimental/functional>
Creates a function object that returns the complement of the result of the function object it holds
(function template)
Defined in header <experimental/numeric>
constexpr function template returning the greatest common divisor of two integers
(function template)
constexpr function template returning the least common multiple of two integers
(function template)

Merged into C++20

The following components of the library fundamentals v2 have been adopted into the C++20 standard.

Uniform container erasure

Defined in header <experimental/string>
Erases all elements equal to a specific value from a std::basic_string
(function template)
Erases all elements satisfying a predicate from a std::basic_string
(function template)
Defined in header <experimental/deque>
Erases all elements equal to a specific value from a std::deque
(function template)
Erases all elements satisfying a predicate from a std::deque
(function template)
Defined in header <experimental/vector>
Erases all elements equal to a specific value from a std::vector
(function template)
Erases all elements satisfying a predicate from a std::vector
(function template)
Defined in header <experimental/forward_list>
Erases all elements equal to a specific value from a std::forward_list
(function template)
Erases all elements satisfying a predicate from a std::forward_list
(function template)
Defined in header <experimental/list>
Erases all elements equal to a specific value from a std::list
(function template)
Erases all elements satisfying a predicate from a std::list
(function template)
Defined in header <experimental/map>
Erases all elements satisfying a predicate from a std::map
(function template)
Erases all elements satisfying a predicate from a std::multimap
(function template)
Defined in header <experimental/set>
Erases all elements satisfying a predicate from a std::set
(function template)
Erases all elements satisfying a predicate from a std::multiset
(function template)
Defined in header <experimental/unordered_map>
Erases all elements satisfying a predicate from a std::unordered_map
(function template)
Erases all elements satisfying a predicate from a std::unordered_multimap
(function template)
Defined in header <experimental/unordered_set>
Erases all elements satisfying a predicate from a std::unordered_set
(function template)
Erases all elements satisfying a predicate from a std::unordered_multiset
(function template)