| | | |
| -------------------------------------------------- | | ------------- |
| template< class Alloc > struct allocator_traits; | | (since C++11) |
The allocator_traits
class template provides the standardized way to access various properties of Allocators . The standard containers and other standard library components access allocators through this template.
It is possible to use any class type as an allocator, as long as the user-provided specialization of std::allocator_traits implements all required functionality.
(until C++23)
A program that declares an explicit or partial specialization of std::allocator_traits is ill-formed, no diagnostic required.
(since C++23)
The default, non-specialized, std::allocator_traits
contains the following members:
Contents
[edit ] Member types
Type
Definition
allocator_type
Alloc
value_type
Alloc::value_type
pointer
Alloc::pointer if present, otherwise value_type*
const_pointer
Alloc::const_pointer if present, otherwise std::pointer_traits <pointer>::rebind<const value_type>
void_pointer
Alloc::void_pointer if present, otherwise std::pointer_traits <pointer>::rebind<void>
const_void_pointer
Alloc::const_void_pointer if present, otherwise std::pointer_traits <pointer>::rebind<const void>
difference_type
Alloc::difference_type if present, otherwise std::pointer_traits <pointer>::difference_type
size_type
Alloc::size_type if present, otherwise std::make_unsigned <difference_type>::type
propagate_on_container_copy_assignment
Alloc::propagate_on_container_copy_assignment if present, otherwise std::false_type
propagate_on_container_move_assignment
Alloc::propagate_on_container_move_assignment if present, otherwise std::false_type
propagate_on_container_swap
Alloc::propagate_on_container_swap if present, otherwise std::false_type
is_always_equal
Alloc::is_always_equal if present, otherwise std::is_empty <Alloc>::type
[edit ] Member alias templates
Type
Definition
rebind_alloc
Alloc::rebind::other if present, otherwise SomeAllocator<T, Args> if this Alloc is of the form SomeAllocator<U, Args>, where Args is zero or more type arguments
rebind_traits
std::allocator_traits<rebind_alloc<T>>
[edit ] Member functions
allocate [static]
allocates uninitialized storage using the allocator (public static member function) [edit]
allocate_at_least [static] (C++23)
allocates storage at least as large as the requested size via an allocator (public static member function) [edit]
deallocate [static]
deallocates storage using the allocator (public static member function) [edit]
construct [static]
constructs an object in the allocated storage (function template) [edit]
destroy [static]
destructs an object stored in the allocated storage (function template) [edit]
max_size [static]
returns the maximum object size supported by the allocator (public static member function) [edit]
select_on_container_copy_construction [static]
obtains the allocator to use after copying a standard container (public static member function) [edit]
[edit ] Defect reportsThe following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR
Applied to
Behavior as published
Correct behavior
LWG 2108
C++11
there was no way to show an allocator is stateless
is_always_equal provided
[edit ] See also