C++ standard libraries extensions - cppreference.com (original) (raw)

Version 1 of the C++ Extensions for Library Fundamentals, ISO/IEC TS 19568:2015 defines the following new components for the C++ standard library:

Contents

[edit] Not selected for inclusion in C++17

The following components of ISO/IEC TS 19568:2015 were not selected for inclusion in C++17.

[edit] Modified versions of existing classes to support type-erased allocators

[edit] Memory resource adaptors

[edit] General utilities

[edit] Feature test macros

Defined in header <experimental/optional>
__cpp_lib_experimental_optional a value of at least 201411 indicates that the optional type is supported (macro constant)
Defined in header <experimental/any>
__cpp_lib_experimental_any a value of at least 201411 indicates that the any type is supported (macro constant)
Defined in header <experimental/string_view>
__cpp_lib_experimental_string_view a value of at least 201411 indicates that basic_string_view template is supported (macro constant)
Defined in header <experimental/tuple>
__cpp_lib_experimental_apply a value of at least 201402 indicates that the tuple apply() function is supported (macro constant)
Defined in header <experimental/type_traits>
__cpp_lib_experimental_type_trait_variable_templates a value of at least 201402 indicates that variable template type traits are supported (macro constant)
__cpp_lib_experimental_invocation_type a value of at least 201406 indicates that invocation type traits are supported (macro constant)
Defined in header <experimental/functional>
__cpp_lib_experimental_boyer_moore_searching a value of at least 201411 indicates that additional searching algorithms are supported (macro constant)
__cpp_lib_experimental_function_erased_allocator a value of at least 201406 indicates that type-erased allocator for std::function is supported (macro constant)
Defined in header <experimental/future>
__cpp_lib_experimental_promise_erased_allocator a value of at least 201406 indicates that type-erased allocator for std::promise is supported (macro constant)
__cpp_lib_experimental_packaged_task_erased_allocator a value of at least 201406 indicates that type-erased allocator for std::packaged_task is supported (macro constant)
Defined in header <experimental/memory>
__cpp_lib_experimental_shared_ptr_arrays a value of at least 201406 indicates that shared_ptr arrays are supported (macro constant)
Defined in header <experimental/memory_resource>
__cpp_lib_experimental_memory_resources a value of at least 201402 indicates that polymorphic memory resources are supported (macro constant)
Defined in header <experimental/algorithm>
__cpp_lib_experimental_sample a value of 201402 indicates that the sample algorithm is supported (macro constant)

[edit] Merged into C++17

The following components of ISO/IEC TS 19568:2015 were included into C++17.

[edit] optional objects

[edit] class any

[edit] string_view

[edit] Type-erased and polymorphic allocators

[edit] Polymorphic allocators and memory resources

The entities in this section are declared in the std::experimental::pmr namespace.

Defined in header <experimental/memory_resource>
memory_resource an abstract interface for classes that encapsulate memory resources (class)
synchronized_pool_resource a thread-safe memory_resource for managing allocations in pools of different block sizes (class) [edit]
unsynchronized_pool_resource a thread-unsafe memory_resource for managing allocations in pools of different block sizes (class) [edit]
monotonic_buffer_resource a special-purpose memory_resource that releases the allocated memory only when the resource is destroyed (class)
polymorphic_allocator an allocator that supports run-time polymorphism based on the memory_resource it is constructed with (class template)
new_delete_resource returns a static program-wide memory_resource that uses the global operator new and operator delete to allocate and deallocate memory (function) [edit]
null_memory_resource returns a static memory_resource that performs no allocation (function) [edit]
get_default_resource gets the default memory_resource (function) [edit]
set_default_resource sets the default memory_resource (function) [edit]

[edit] Convenience aliases for containers using polymorphic allocators

Convenience aliases and alias templates for containers using polymorphic allocators are provided in the std::experimental::pmr namespace for the following class templates in the standard library:

[edit] Array support for shared_ptr

[edit] Sampling and searching algorithms

Defined in header <experimental/algorithm>
sample selects n random elements from a sequence (function template)
search applies a Searcher to a sequence (function template)
Defined in header <experimental/functional>
default_searcher standard C++ library search algorithm implementation (class template)
make_default_searcher helper function to create a default_searcher (function template)
boyer_moore_searcher Boyer-Moore search algorithm implementation (class template)
make_boyer_moore_searcher helper function to create a boyer_moore_searcher (function template)
boyer_moore_horspool_searcher Boyer-Moore-Horspool search algorithm implementation (class template)
make_boyer_moore_horspool_searcher helper function to create a boyer_moore_horspool_searcher (function template)

[edit] General utilities

In addition, the TS provides numerous constexpr variable templates for the following type traits and other class templates in the standard library:

List of type traits and other class templates for which variable templates are provided
std::is_void std::is_null_pointer std::is_integral std::is_floating_point std::is_array std::is_pointer std::is_lvalue_reference std::is_rvalue_reference std::is_member_object_pointer std::is_member_function_pointer std::is_enum std::is_union std::is_class std::is_function std::is_reference std::is_arithmetic std::is_fundamental std::is_object std::is_scalar std::is_compound std::is_member_pointer std::is_const std::is_volatile std::is_trivial std::is_trivially_copyable std::is_standard_layout std::is_pod std::is_literal_type std::is_empty std::is_polymorphic std::is_abstract std::is_final std::is_signed std::is_unsigned std::is_constructible std::is_trivially_constructible std::is_nothrow_constructible std::is_default_constructible std::is_trivially_default_constructible std::is_nothrow_default_constructible std::is_copy_constructible std::is_trivially_copy_constructible std::is_nothrow_copy_constructible std::is_move_constructible std::is_trivially_move_constructible std::is_nothrow_move_constructible std::is_assignable std::is_trivially_assignable std::is_nothrow_assignable std::is_copy_assignable std::is_trivially_copy_assignable std::is_nothrow_copy_assignable std::is_move_assignable std::is_trivially_move_assignable std::is_nothrow_move_assignable std::is_destructible std::is_trivially_destructible std::is_nothrow_destructible std::has_virtual_destructor std::alignment_of std::rank std::extent std::is_same std::is_base_of std::is_convertible std::ratio_equal std::ratio_not_equal std::ratio_less std::ratio_less_equal std::ratio_greater std::ratio_greater_equal std::tuple_size std::chrono::treat_as_floating_point std::is_error_code_enum std::is_error_condition_enum std::is_bind_expression std::is_placeholder std::uses_allocator