---
name: "__gnu_cxx::_Pointer_adapter"
section: "3"
platform: "linux"
package: "gcc"
version: "16.2.1+r23+gd564253eb6c8-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/__gnu_cxx::_Pointer_adapter"
---

# \_\_gnu\_cxx::\_Pointer\_adapter(3)

## NAME

\_\_gnu\_cxx::\_Pointer\_adapter\< \_Storage\_policy \>

## SYNOPSIS

\#include \<pointer.h\>

### Public Types

typedef std::ptrdiff\_t **difference\_type**\
 typedef \_Storage\_policy::element\_type **element\_type**\
 typedef **std::random\_access\_iterator\_tag** **iterator\_category**\
 typedef \_Pointer\_adapter **pointer**\
 typedef \_Reference\_type\< element\_type \>::reference **reference**\
 typedef **\_Unqualified\_type**\< element\_type \>**::type** **value\_type**\

### Public Member Functions

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** () const\
 reference **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-\>** () const\
 template\<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

\_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

### template\<typename \_Storage\_policy\>

class \_\_gnu\_cxx::\_Pointer\_adapter\< \_Storage\_policy \>"The following provides an 'alternative pointer' that works with the containers when specified as the pointer typedef of the allocator.

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 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, 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: 1) use the Allocator::pointer typedef appropriately for pointer types. 2) if you need pointer casting, use the \_\_pointer\_cast\<\> functions from ext/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:

\_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.
