__GNU_CXX::_POINTER_ADAPTER(3cxx)
✨ NAME ✨
__gnu_cxx::_Pointer_adapter< _Storage_policy > — bestie, this is the 3cxx manual page for that exact class (the original header got truncated as __gnu_cxx::_Poi...torage_policy >(3cxx), so we’re putting the full name up front). 💖
✨ SYNOPSIS ✨
#include <pointer.h>
Inherits _Storage_policy.
🫶 Public Types 🫶
typedef std::ptrdiff_t difference_typetypedef _Storage_policy::element_type element_typetypedef std::random_access_iterator_tag iterator_categorytypedef _Pointer_adapter pointertypedef _Reference_type< element_type >::reference referencetypedef _Unqualified_type< element_type >::type value_type
💅 Public Member Functions 💅
Here’s the whole overload squad, signatures kept exactly as the page gives them, because we do not mess with code in this group chat. 💅
template<typename _Up > _Pointer_adapter (_Up *__arg)_Pointer_adapter (const _Pointer_adapter &__arg)template<typename _Up > _Pointer_adapter (const _Pointer_adapter< _Up > &__arg)_Pointer_adapter (element_type *__arg=0)operator bool () constreference operator* () const_Pointer_adapter & operator++ ()_Pointer_adapter operator++ (int)_Pointer_adapter & operator+= (int __offset)_Pointer_adapter & operator+= (long __offset)_Pointer_adapter & operator+= (long long __offset)_Pointer_adapter & operator+= (short __offset)_Pointer_adapter & operator+= (unsigned int __offset)_Pointer_adapter & operator+= (unsigned long __offset)_Pointer_adapter & operator+= (unsigned long long __offset)_Pointer_adapter & operator+= (unsigned short __offset)template<typename _Up > std::ptrdiff_t operator- (const _Pointer_adapter< _Up > &__rhs) const_Pointer_adapter & operator-- ()_Pointer_adapter operator-- (int)_Pointer_adapter & operator-= (int __offset)_Pointer_adapter & operator-= (long __offset)_Pointer_adapter & operator-= (long long __offset)_Pointer_adapter & operator-= (short __offset)_Pointer_adapter & operator-= (unsigned int __offset)_Pointer_adapter & operator-= (unsigned long __offset)_Pointer_adapter & operator-= (unsigned long long __offset)_Pointer_adapter & operator-= (unsigned short __offset)element_type * operator-> () consttemplate<typename _Up > _Pointer_adapter & operator= (_Up *__arg)_Pointer_adapter & operator= (const _Pointer_adapter &__arg)template<typename _Up > _Pointer_adapter & operator= (const _Pointer_adapter< _Up > &__arg)reference operator[] (std::ptrdiff_t __index) const
🦋 Friends 🦋
The friend zone is actually stacked, no cap. Every operator+, operator-, and the spaceship operator are right here. 🫶
_Pointer_adapter operator+ (const _Pointer_adapter &__lhs, int __offset)_Pointer_adapter operator+ (const _Pointer_adapter &__lhs, long __offset)_Pointer_adapter operator+ (const _Pointer_adapter &__lhs, long long __offset)_Pointer_adapter operator+ (const _Pointer_adapter &__lhs, short __offset)_Pointer_adapter operator+ (const _Pointer_adapter &__lhs, unsigned int __offset)_Pointer_adapter operator+ (const _Pointer_adapter &__lhs, unsigned long __offset)_Pointer_adapter operator+ (const _Pointer_adapter &__lhs, unsigned long long __offset)_Pointer_adapter operator+ (const _Pointer_adapter &__lhs, unsigned short __offset)_Pointer_adapter operator+ (int __offset, const _Pointer_adapter &__rhs)_Pointer_adapter operator+ (long __offset, const _Pointer_adapter &__rhs)_Pointer_adapter operator+ (long long __offset, const _Pointer_adapter &__rhs)_Pointer_adapter operator+ (short __offset, const _Pointer_adapter &__rhs)_Pointer_adapter operator+ (unsigned int __offset, const _Pointer_adapter &__rhs)_Pointer_adapter operator+ (unsigned long __offset, const _Pointer_adapter &__rhs)_Pointer_adapter operator+ (unsigned long long __offset, const _Pointer_adapter &__rhs)_Pointer_adapter operator+ (unsigned short __offset, const _Pointer_adapter &__rhs)template<typename _Up > std::ptrdiff_t operator- (_Up *__lhs, const _Pointer_adapter &__rhs)template<typename _Up > std::ptrdiff_t operator- (const _Pointer_adapter &__lhs, _Up *__rhs)std::ptrdiff_t operator- (const _Pointer_adapter &__lhs, element_type *__rhs)_Pointer_adapter operator- (const _Pointer_adapter &__lhs, int __offset)_Pointer_adapter operator- (const _Pointer_adapter &__lhs, long __offset)_Pointer_adapter operator- (const _Pointer_adapter &__lhs, long long __offset)_Pointer_adapter operator- (const _Pointer_adapter &__lhs, short __offset)_Pointer_adapter operator- (const _Pointer_adapter &__lhs, unsigned int __offset)_Pointer_adapter operator- (const _Pointer_adapter &__lhs, unsigned long __offset)_Pointer_adapter operator- (const _Pointer_adapter &__lhs, unsigned long long __offset)_Pointer_adapter operator- (const _Pointer_adapter &__lhs, unsigned short __offset)std::ptrdiff_t operator- (element_type *__lhs, const _Pointer_adapter &__rhs)std::strong_ordering operator<=> (const _Pointer_adapter &__lhs, const _Pointer_adapter &__rhs) noexcept
🌈 Detailed Description 🌈
The template is:
template<typename _Storage_policy>
class __gnu_cxx::_Pointer_adapter< _Storage_policy >
The source then has a literal " immediately after that class line, and the description starts like this: “The following provides an 'alternative pointer' that works with the containers when specified as the pointer typedef of the allocator.” Yes, that quote mark is in the source, bestie — we’re not editing it out. 😭
The pointer type used with the containers doesn’t have to be this class, but it must support the implicit conversions, pointer arithmetic, comparison operators, etc. that are supported by this class, and it must avoid raising compile-time ambiguities. Because creating a working pointer can be challenging, this pointer template was designed to wrapper an easier storage policy type (yes, the doc says “wrapper” as a verb, and we respect the icon ✨), so that it becomes reusable for creating other pointer types.
A key point of this class is also that it allows container writers to “assume” Allocator::pointer is a typedef for a normal pointer. This class supports most of the conventions of a true pointer, and can, for instance, handle implicit conversion to const and base class pointer types. The only impositions on container writers to support extended pointers are:
- Use the
Allocator::pointertypedef appropriately for pointer types. - If you need pointer casting, use the
__pointer_cast<>functions fromext/cast.h. This allows pointer cast operations to be overloaded as necessary by custom pointers.
Note: the const qualifier works with this pointer adapter as follows, and these mappings are literal. 🫶
_Tp* == _Pointer_adapter<_Std_pointer_impl<_Tp> >; const _Tp* == _Pointer_adapter<_Std_pointer_impl<const _Tp> >; _Tp* const == const _Pointer_adapter<_Std_pointer_impl<_Tp> >; const _Tp* const == const _Pointer_adapter<_Std_pointer_impl<const _Tp> >;
💜 Author 💜
Generated automatically by Doxygen for libstdc++ from the source code. 💖
⭐ okay bye bestie! This page came from libstdc++, and the source/version footer is literally libst__gnu_cxx::_Poi...torage_policy >(3cxx); the original footer doesn’t show a date, so no invented date from me. 💅✨
📦 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