__GNU_CXX::__ALLOC_TRAITS(3cxx)
π __gnu_cxx::__alloc_traits< _Alloc, typename > π
okay bestie, this is the 3cxx manual page for __gnu_cxx::__alloc_traits< _Alloc, typename >, and it is literally serving Uniform interface to C++98 and C++11 allocators. Thatβs the whole vibe. π«Ά
πΈ NAME πΈ
__gnu_cxx::__alloc_traits< _Alloc, typename > β Uniform interface to C++98 and C++11 allocators.
β¨ SYNOPSIS β¨
#include <alloc_traits.h>
Inherits std::allocator_traits< _Alloc >.
π Public Types π
typedef std::allocator_traits< _Alloc > _Base_typeβ the base-type bestie.typedef _Alloc allocator_typeβ the allocator type itself.typedef _Base_type::const_pointer const_pointerβ const pointer type from the base.typedef const value_type & const_referenceβ const reference to a value.using const_void_pointer = typename _Ptr< __cv_pointer, const void >::typeβ the allocator's const void pointer type. π«Άtypedef _Base_type::difference_type difference_typeβ difference type from the base.using is_always_equal = typename __detected_or_t< is_empty< _Alloc >, __equal, _Alloc >::typeβ whether all instances of the allocator type compare equal.typedef _Base_type::pointer pointerβ pointer type from the base.using propagate_on_container_copy_assignment = __detected_or_t< false_type, __pocca, _Alloc >β how the allocator is propagated on copy assignment.using propagate_on_container_move_assignment = __detected_or_t< false_type, __pocma, _Alloc >β how the allocator is propagated on move assignment.using propagate_on_container_swap = __detected_or_t< false_type, __pocs, _Alloc >β how the allocator is propagated on swap.template<typename _Tp > using rebind_alloc = __alloc_rebind< _Alloc, _Tp >β rebind the allocator for another_Tp.template<typename _Tp > using rebind_traits = allocator_traits< rebind_alloc< _Tp > >β rebind traits for another_Tp.typedef value_type & referenceβ reference to a value.typedef _Base_type::size_type size_typeβ size type from the base.typedef _Base_type::value_type value_typeβ value type from the base.using void_pointer = typename _Ptr< __v_pointer, void >::typeβ the allocator's void pointer type. π
π§ Static Public Member Functions π§
static constexpr bool _S_always_equal ()static constexpr bool _S_nothrow_move ()static constexpr void _S_on_swap (_Alloc &__a, _Alloc &__b)static constexpr bool _S_propagate_on_copy_assign ()static constexpr bool _S_propagate_on_move_assign ()static constexpr bool _S_propagate_on_swap ()static constexpr _Alloc _S_select_on_copy (const _Alloc &__a)static constexpr pointer allocate (_Alloc &__a, size_type __n)β Allocate memory.static constexpr pointer allocate (_Alloc &__a, size_type __n)β Allocate memory. yes, itβs listed again, bestie. πstatic constexpr pointer allocate (_Alloc &__a, size_type __n, const_void_pointer __hint)β Allocate memory.static constexpr pointer allocate (_Alloc &__a, size_type __n, const_void_pointer __hint)β Allocate memory. also listed again. periodt.template<typename _Ptr , typename... _Args> static constexpr std::__enable_if_t< __is_custom_pointer< _Ptr >::value > construct (_Alloc &__a, _Ptr __p, _Args &&... __args) noexcept(noexcept(_Base_type::construct(__a, std::__to_address(__p), std::forward< _Args >(__args)...)))template<typename _Tp , typename... _Args> static constexpr auto construct (_Alloc &__a, _Tp *__p, _Args &&... __args) noexcept(noexcept(_S_construct(__a, __p, std::forward< _Args >(__args)...))) -> decltype(_S_construct(__a, __p, std::forward< _Args >(__args)...))β Construct an object of type_Tp.static constexpr void deallocate (_Alloc &__a, pointer __p, size_type __n)β Deallocate memory.static constexpr void deallocate (_Alloc &__a, pointer __p, size_type __n)β Deallocate memory. another duplicate drop. π«template<typename _Ptr > static constexpr std::__enable_if_t< __is_custom_pointer< _Ptr >::value > destroy (_Alloc &__a, _Ptr __p) noexcept(noexcept(_Base_type::destroy(__a, std::__to_address(__p))))template<typename _Tp > static constexpr void destroy (_Alloc &__a, _Tp *__p) noexcept(noexcept(_S_destroy(__a, __p, 0)))β Destroy an object of type_Tp.static constexpr size_type max_size (const _Alloc &__a) noexceptβ The maximum supported allocation size.static constexpr _Alloc select_on_container_copy_construction (const _Alloc &__rhs)β Obtain an allocator to use when copying a container.
π« Detailed Description π«
The page frames this struct like this:
template<typename _Alloc, typename = typename _Alloc::value_type>
struct __gnu_cxx::__alloc_traits< _Alloc, typename >
and the description is literally Uniform interface to C++98 and C++11 allocators. Thatβs the entire icon behavior. no cap. π
π¦ Member Typedef Documentation π¦
π const_void_pointer β inherited
template<typename _Alloc > using std::allocator_traits< _Alloc >::const_void_pointer = typename _Ptr<__cv_pointer, const void>::type [inherited]
The allocator's const void pointer type. Itβs Alloc::const_void_pointer if that type exists, otherwise pointer_traits<pointer>::rebind<const void>. π«Ά
π is_always_equal β inherited
template<typename _Alloc > using std::allocator_traits< _Alloc >::is_always_equal = typename __detected_or_t<is_empty<_Alloc>, __equal, _Alloc>::type [inherited]
Whether all instances of the allocator type compare equal. Itβs Alloc::is_always_equal if that type exists, otherwise is_empty<Alloc>::type. β¨
π propagate_on_container_copy_assignment β inherited
template<typename _Alloc > using std::allocator_traits< _Alloc >::propagate_on_container_copy_assignment = __detected_or_t<false_type, __pocca, _Alloc> [inherited]
How the allocator is propagated on copy assignment. Itβs Alloc::propagate_on_container_copy_assignment if that type exists, otherwise false_type. π
π propagate_on_container_move_assignment β inherited
template<typename _Alloc > using std::allocator_traits< _Alloc >::propagate_on_container_move_assignment = __detected_or_t<false_type, __pocma, _Alloc> [inherited]
How the allocator is propagated on move assignment. Itβs Alloc::propagate_on_container_move_assignment if that type exists, otherwise false_type. π¦
π propagate_on_container_swap β inherited
template<typename _Alloc > using std::allocator_traits< _Alloc >::propagate_on_container_swap = __detected_or_t<false_type, __pocs, _Alloc> [inherited]
How the allocator is propagated on swap. Itβs Alloc::propagate_on_container_swap if that type exists, otherwise false_type. πΈ
π void_pointer β inherited
template<typename _Alloc > using std::allocator_traits< _Alloc >::void_pointer = typename _Ptr<__v_pointer, void>::type [inherited]
The allocator's void pointer type. Itβs Alloc::void_pointer if that type exists, otherwise pointer_traits<pointer>::rebind<void>. π
π₯ Member Function Documentation π₯
π allocate β two-argument version, inherited
template<typename _Alloc > static constexpr pointer std::allocator_traits< _Alloc >::allocate (_Alloc & __a, size_type __n) [inline], [static], [constexpr], [inherited]
Allocate memory. π
Parameters
__aβ An allocator.__nβ The number of objects to allocate space for.
Calls a.allocate(n).
π allocate β two-argument version, non-inherited
template<typename _Alloc , typename = typename _Alloc::value_type> static constexpr pointer std::allocator_traits< _Alloc >::allocate (_Alloc & __a, size_type __n) [inline], [static], [constexpr]
Allocate memory. π
Parameters
__aβ An allocator.__nβ The number of objects to allocate space for.
Calls a.allocate(n).
π allocate β three-argument version, inherited
template<typename _Alloc > static constexpr pointer std::allocator_traits< _Alloc >::allocate (_Alloc & __a, size_type __n, const_void_pointer __hint) [inline], [static], [constexpr], [inherited]
Allocate memory. π
Parameters
__aβ An allocator.__nβ The number of objects to allocate space for.__hintβ Aid to locality.
Returns
Memory of suitable size and alignment for n objects of type value_type.
Returns a.allocate(n, hint) if that expression is well-formed, otherwise returns a.allocate(n).
π allocate β three-argument version, non-inherited
template<typename _Alloc , typename = typename _Alloc::value_type> static constexpr pointer std::allocator_traits< _Alloc >::allocate (_Alloc & __a, size_type __n, const_void_pointer __hint) [inline], [static], [constexpr]
Allocate memory. π
Parameters
__aβ An allocator.__nβ The number of objects to allocate space for.__hintβ Aid to locality.
Returns
Memory of suitable size and alignment for n objects of type value_type.
Returns a.allocate(n, hint) if that expression is well-formed, otherwise returns a.allocate(n).
π§ construct β the _Tp version
template<typename _Alloc , typename = typename _Alloc::value_type>
template<typename _Tp , typename... _Args> static constexpr auto
std::allocator_traits< _Alloc >::construct (_Alloc & __a, _Tp * __p,
_Args &&... __args) -> decltype(_S_construct(__a, __p,
std::forward<_Args>(__args)...))
[inline], [static], [constexpr], [noexcept]
Construct an object of type _Tp. π«Ά
Parameters
__aβ An allocator.__pβ Pointer to memory of suitable size and alignment for Tp__argsβ Constructor arguments.
Calls __a.construct(__p, std::forward<Args>(__args)...) if that expression is well-formed, otherwise uses placement-new to construct an object of type _Tp at location __p from the arguments __args....
π deallocate β inherited
template<typename _Alloc > static constexpr void std::allocator_traits< _Alloc >::deallocate (_Alloc & __a, pointer __p, size_type __n) [inline], [static], [constexpr], [inherited]
Deallocate memory. π
Parameters
__aβ An allocator.__pβ Pointer to the memory to deallocate.__nβ The number of objects space was allocated for.
Calls a.deallocate(p, n).
π deallocate β non-inherited
template<typename _Alloc , typename = typename _Alloc::value_type> static constexpr void std::allocator_traits< _Alloc >::deallocate (_Alloc & __a, pointer __p, size_type __n) [inline], [static], [constexpr]
Deallocate memory. π
Parameters
__aβ An allocator.__pβ Pointer to the memory to deallocate.__nβ The number of objects space was allocated for.
Calls a.deallocate(p, n).
π destroy β the _Tp version
template<typename _Alloc , typename = typename _Alloc::value_type>
template<typename _Tp > static constexpr void std::allocator_traits< _Alloc >::destroy (_Alloc & __a, _Tp * __p) [inline], [static], [constexpr], [noexcept]
Destroy an object of type _Tp. π
Parameters
__aβ An allocator.__pβ Pointer to the object to destroy
Calls __a.destroy(__p) if that expression is well-formed, otherwise calls __p->~_Tp().
π max_size
template<typename _Alloc , typename = typename _Alloc::value_type> static constexpr size_type std::allocator_traits< _Alloc >::max_size (const _Alloc & __a) [inline], [static], [constexpr], [noexcept]
The maximum supported allocation size. π
Parameters
__aβ An allocator.
Returns
__a.max_size() or numeric_limits<size_type>::max().
Returns __a.max_size() if that expression is well-formed, otherwise returns numeric_limits<size_type>::max().
Referenced by std::forward_list< _Tp, _Alloc >::max_size(), and std::list< _Tp, _Alloc >::max_size().
π select_on_container_copy_construction
template<typename _Alloc > static constexpr _Alloc std::allocator_traits< _Alloc >::select_on_container_copy_construction (const _Alloc & __rhs) [inline], [static], [constexpr], [inherited]
Obtain an allocator to use when copying a container. π
Parameters
__rhsβ An allocator.
Returns
__rhs.select_on_container_copy_construction() or __rhs.
Returns __rhs.select_on_container_copy_construction() if that expression is well-formed, otherwise returns __rhs.
πΈ AUTHOR πΈ
Bestie, real talk: nobody sat down and lovingly hand-wrote this page. π It says it right there β it was generated automatically by Doxygen for libstdc++ from the source code. So the "author" is literally the doc tool doing its little robot thing. No cap, the source code is the main character here, and Doxygen just showed up to take notes. π«Ά
So if you spot something in here that reads a little stiff, that's why β it's machine-generated from the actual headers, which honestly is kind of iconic of it. π₯ The facts are all straight from the source; only the vibe got the glow-up. β¨
That's a wrap on this one, bestie! π The footer on this page β the little running line at the very bottom, with the source/version on it and the date β is literally just:
libstd__gnu_cxx::__a...loc, typename >(3cxx)
(yes, Doxygen really said "let me truncate that for you" π it's giving abbreviate-and-move-on) and it's stamped with this edition's date, generated by Doxygen for libstdc++ straight from the source code. Go read some headers, stay hydrated, and slay your template diagnostics. ππ
π¦ where this page comes from
- ubuntu noble: libstdc++-14-doc 14-20240412-0ubuntu1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms