C++ standard libraries extensions

From cppreference.com

The C++ Extensions for Library Fundamentals, ISO/IEC TS 19568:xxxx, defines the following new components for the C++ standard library:

Contents

[edit] optional objects

Defined in header <experimental/optional>
a class template representing optional objects
(class template)

[edit] class any

Defined in header <experimental/any>
a type-safe container for single values of any type
(class)

[edit] string_view

Defined in header <experimental/string_view>
a non-owning reference to a string
(class template)

[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>
an abstract interface for classes that encapsulate memory resources
(class)
a thread-safe memory_resource for managing allocations in pools of different block sizes
(class)
a thread-unsafe memory_resource for managing allocations in pools of different block sizes
(class)
a special-purpose memory_resource that releases the allocated memory only when the resource is destroyed
(class)
an allocator that supports run-time polymorphism based on the memory_resource it is constructed with
(class template)
adapts an allocator into a memory_resource
(alias template)
returns a static program-wide memory_resource that uses the global operator new and operator delete to allocate and deallocate memory
(function)
returns a static memory_resource that performs no allocation
(function)
gets the default memory_resource
(function)
sets the default memory_resource
(function)

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

Defined in header <experimental/functional>
a modified version of std::function with support for type-erased allocators
(class template)
Defined in header <experimental/future>
a modified version of std::promise with support for type-erased allocators
(class template)
a modified version of std::packaged_task with support for type-erased allocators
(class template)

[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:

  • std::vector
  • std::deque
  • std::forward_list
  • std::list
  • std::basic_string
  • std::map
  • std::multimap
  • std::set
  • std::multiset
  • std::match_results
  • std::unordered_map
  • std::unordered_multimap
  • std::unordered_set
  • std::unordered_multiset

[edit] Array support for shared_ptr

Defined in header <experimental/memory>
Class Description
A modified version of std::shared_ptr that supports arrays
(class template)
A modified version of std::weak_ptr that supports arrays
(class template)

[edit] Sampling and searching algorithms

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

[edit] General utilities

Defined in header <experimental/utility>
placeholder type for type erasure, such as in allocators
(class)
Defined in header <experimental/tuple>
calls a function to a tuple of arguments
(function template)
Defined in header <experimental/type_traits>
deduce the implied function type of the callable object when called with the given argument types
(class template)

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

  • 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

[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)
Defined in header <experimental/type_traits>
__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)
Defined in header <experimental/functional>
__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)
Defined in header <experimental/future>
__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)