◐ Shell
clean mode source ↗

C++ standard libraries extensions, version 2

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

A const-propagating wrapper for pointer-like objects

Non-owning pointers

std::array creation

(library fundamentals TS v2)

creates a std::array object whose size and optionally element type are deduced from the arguments
(function template) [edit]

ostream_joiner

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) [edit]
reseeds the per-thread random engine
(function) [edit]

Defined in header <experimental/algorithm>

selects n random elements from a sequence
(function template)
randomly re-orders elements in a range
(function template)

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)

__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)

__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) [edit]

Defined in header <experimental/numeric>

constexpr function template returning the greatest common divisor of two integers
(function template) [edit]
constexpr function template returning the least common multiple of two integers
(function template) [edit]

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)

Source code information capture

std::array conversion