[meta.trans.ptr]

# 21 Metaprogramming library [[meta]](./#meta)

## 21.3 Metaprogramming and type traits [[type.traits]](type.traits#meta.trans.ptr)

### 21.3.9 Transformations between types [[meta.trans]](meta.trans#ptr)

#### 21.3.9.6 Pointer modifications [meta.trans.ptr]

[1](#1)

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

The templates specified in Table [61](#tab:meta.trans.ptr "Table 61: Pointer modifications") add or remove pointers[.](#1.sentence-1)

Table [61](#tab:meta.trans.ptr) — Pointer modifications [[tab:meta.trans.ptr]](./tab:meta.trans.ptr)  

| [ð](#tab:meta.trans.ptr-row-1)<br>**Template** | **Comments** |
| --- | --- |
| [ð](#tab:meta.trans.ptr-row-2)<br>template<class T>   struct remove_pointer; | If T has type â(possibly cv-qualified) pointer  to T1â then the member typedef type  denotes T1; otherwise, it denotes T[.](#tab:meta.trans.ptr-row-2-column-2-sentence-1) |
| [ð](#tab:meta.trans.ptr-row-3)<br>template<class T>   struct add_pointer; | If T is a referenceable type ([[defns.referenceable]](defns.referenceable "3.45 referenceable type")) or a  cv void type then  the member typedef type denotes  remove_reference_t<T>*;  otherwise, type denotes T[.](#tab:meta.trans.ptr-row-3-column-2-sentence-1) |
