Files
cppdraft_translate/cppdraft/allocator/traits/general.md
2025-10-25 03:02:53 +03:00

2.2 KiB

[allocator.traits.general]

20 Memory management library [mem]

20.2 Memory [memory]

20.2.9 Allocator traits [allocator.traits]

20.2.9.1 General [allocator.traits.general]

1

#

The class template allocator_traits supplies a uniform interface to all allocator types.

An allocator cannot be a non-class type, however, even if allocator_traits supplies the entire required interface.

[Note 1:

Thus, it is always possible to create a derived class from an allocator.

— end note]

If a program declares an explicit or partial specialization of allocator_traits, the program is ill-formed, no diagnostic required.

🔗

namespace std {template struct allocator_traits {using allocator_type = Alloc; using value_type = typename Alloc::value_type; using pointer = see below; using const_pointer = see below; using void_pointer = see below; using const_void_pointer = see below; using difference_type = see below; using size_type = see below; using propagate_on_container_copy_assignment = see below; using propagate_on_container_move_assignment = see below; using propagate_on_container_swap = see below; using is_always_equal = see below; template using rebind_alloc = see below; template using rebind_traits = allocator_traits<rebind_alloc>; static constexpr pointer allocate(Alloc& a, size_type n); static constexpr pointer allocate(Alloc& a, size_type n, const_void_pointer hint); static constexpr allocation_result<pointer, size_type> allocate_at_least(Alloc& a, size_type n); static constexpr void deallocate(Alloc& a, pointer p, size_type n); template<class T, class... Args>static constexpr void construct(Alloc& a, T* p, Args&&... args); templatestatic constexpr void destroy(Alloc& a, T* p); static constexpr size_type max_size(const Alloc& a) noexcept; static constexpr Alloc select_on_container_copy_construction(const Alloc& rhs); };}