C++ standard libraries extensions, version 2 (original) (raw)

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:

Contents

[edit] The C++ detection idiom

[edit] A const-propagating wrapper for pointer-like objects

[edit] Non-owning pointers

[edit] std::array creation

[edit] ostream_joiner

[edit] 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>
randint generates a random integer in the specified range (function template) [edit]
reseed reseeds the per-thread random engine (function) [edit]
Defined in header <experimental/algorithm>
sample selects n random elements from a sequence (function template)
shuffle randomly re-orders elements in a range (function template)

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

[edit] 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>
void_t variadic alias template for void(alias template)
Defined in header <experimental/type_traits>
conjunction variadic logical AND metafunction (class template)
disjunction variadic logical OR metafunction (class template)
negation logical NOT metafunction (class template)
Defined in header <experimental/functional>
not_fn 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>
gcd constexpr function template returning the greatest common divisor of two integers (function template) [edit]
lcm constexpr function template returning the least common multiple of two integers (function template) [edit]

[edit] Merged into C++20

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

[edit] Uniform container erasure

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

[edit] Source code information capture

[edit] std::array conversion