[allocator.traits.types]

# 20 Memory management library [[mem]](./#mem)

## 20.2 Memory [[memory]](memory#allocator.traits.types)

### 20.2.9 Allocator traits [[allocator.traits]](allocator.traits#types)

#### 20.2.9.2 Member types [allocator.traits.types]

[ð](#lib:pointer,allocator_traits)

`using pointer = see below;
`

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L1705)

*Type*: Alloc​::​pointer if
the [*qualified-id*](expr.prim.id.qual#nt:qualified-id "7.5.5.3 Qualified names [expr.prim.id.qual]") Alloc​::​pointer is valid and denotes a
type ([[temp.deduct]](temp.deduct "13.10.3 Template argument deduction")); otherwise, value_type*[.](#1.sentence-1)

[ð](#lib:const_pointer,allocator_traits)

`using const_pointer = see below;
`

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L1717)

*Type*: Alloc​::​const_pointer if
the [*qualified-id*](expr.prim.id.qual#nt:qualified-id "7.5.5.3 Qualified names [expr.prim.id.qual]") Alloc​::​const_pointer is valid and denotes a
type ([[temp.deduct]](temp.deduct "13.10.3 Template argument deduction")); otherwise,pointer_traits<pointer>​::​rebind<​const value_type>[.](#2.sentence-1)

[ð](#lib:void_pointer,allocator_traits)

`using void_pointer = see below;
`

[3](#3)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L1730)

*Type*: Alloc​::​void_pointer if
the [*qualified-id*](expr.prim.id.qual#nt:qualified-id "7.5.5.3 Qualified names [expr.prim.id.qual]") Alloc​::​void_pointer is valid and denotes a
type ([[temp.deduct]](temp.deduct "13.10.3 Template argument deduction")); otherwise,pointer_traits<pointer>​::​rebind<​void>[.](#3.sentence-1)

[ð](#lib:const_void_pointer,allocator_traits)

`using const_void_pointer = see below;
`

[4](#4)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L1743)

*Type*: Alloc​::​const_void_pointer if
the [*qualified-id*](expr.prim.id.qual#nt:qualified-id "7.5.5.3 Qualified names [expr.prim.id.qual]") Alloc​::​const_void_pointer is valid and denotes a
type ([[temp.deduct]](temp.deduct "13.10.3 Template argument deduction")); otherwise,pointer_traits<pointer>​::​​rebind<const void>[.](#4.sentence-1)

[ð](#lib:difference_type,allocator_traits)

`using difference_type = see below;
`

[5](#5)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L1756)

*Type*: Alloc​::​difference_type if
the [*qualified-id*](expr.prim.id.qual#nt:qualified-id "7.5.5.3 Qualified names [expr.prim.id.qual]") Alloc​::​difference_type is valid and denotes a
type ([[temp.deduct]](temp.deduct "13.10.3 Template argument deduction")); otherwise,pointer_traits<pointer>​::​difference_type[.](#5.sentence-1)

[ð](#lib:size_type,allocator_traits)

`using size_type = see below;
`

[6](#6)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L1769)

*Type*: Alloc​::​size_type if
the [*qualified-id*](expr.prim.id.qual#nt:qualified-id "7.5.5.3 Qualified names [expr.prim.id.qual]") Alloc​::​size_type is valid and denotes a
type ([[temp.deduct]](temp.deduct "13.10.3 Template argument deduction")); otherwise,make_unsigned_t<difference_type>[.](#6.sentence-1)

[ð](#lib:propagate_on_container_copy_assignment,allocator_traits)

`using propagate_on_container_copy_assignment = see below;
`

[7](#7)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L1782)

*Type*: Alloc​::​propagate_on_container_copy_assignment if
the [*qualified-id*](expr.prim.id.qual#nt:qualified-id "7.5.5.3 Qualified names [expr.prim.id.qual]") Alloc​::​propagate_on_container_copy_assignment is valid and denotes a
type ([[temp.deduct]](temp.deduct "13.10.3 Template argument deduction")); otherwisefalse_type[.](#7.sentence-1)

[ð](#lib:propagate_on_container_move_assignment,allocator_traits)

`using propagate_on_container_move_assignment = see below;
`

[8](#8)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L1795)

*Type*: Alloc​::​propagate_on_container_move_assignment if
the [*qualified-id*](expr.prim.id.qual#nt:qualified-id "7.5.5.3 Qualified names [expr.prim.id.qual]") Alloc​::​propagate_on_container_move_assignment is valid and denotes a
type ([[temp.deduct]](temp.deduct "13.10.3 Template argument deduction")); otherwisefalse_type[.](#8.sentence-1)

[ð](#lib:propagate_on_container_swap,allocator_traits)

`using propagate_on_container_swap = see below;
`

[9](#9)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L1808)

*Type*: Alloc​::​propagate_on_container_swap if
the [*qualified-id*](expr.prim.id.qual#nt:qualified-id "7.5.5.3 Qualified names [expr.prim.id.qual]") Alloc​::​propagate_on_container_swap is valid and denotes a
type ([[temp.deduct]](temp.deduct "13.10.3 Template argument deduction")); otherwisefalse_type[.](#9.sentence-1)

[ð](#lib:is_always_equal,allocator_traits)

`using is_always_equal = see below;
`

[10](#10)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L1821)

*Type*: Alloc​::​is_always_equal if
the [*qualified-id*](expr.prim.id.qual#nt:qualified-id "7.5.5.3 Qualified names [expr.prim.id.qual]") Alloc​::​is_always_equal is valid and denotes a type ([[temp.deduct]](temp.deduct "13.10.3 Template argument deduction"));
otherwise is_empty<Alloc>​::​type[.](#10.sentence-1)

[ð](#lib:rebind_alloc,allocator_traits)

`template<class T> using rebind_alloc = see below;
`

[11](#11)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/memory.tex#L1834)

*Alias template*: Alloc​::​rebind<T>​::​other if
the [*qualified-id*](expr.prim.id.qual#nt:qualified-id "7.5.5.3 Qualified names [expr.prim.id.qual]") Alloc​::​rebind<T>​::​other is valid and denotes a
type ([[temp.deduct]](temp.deduct "13.10.3 Template argument deduction")); otherwise,Alloc<T, Args> if Alloc is a class template instantiation
of the form Alloc<U, Args>, where Args is zero or more type arguments;
otherwise, the instantiation of rebind_alloc is ill-formed[.](#11.sentence-1)
