[type.traits.general]

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

## 21.3 Metaprogramming and type traits [[type.traits]](type.traits#general)

### 21.3.1 General [type.traits.general]

[1](#1)

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

Subclause [[type.traits]](type.traits "21.3 Metaprogramming and type traits") describes components used by C++ programs, particularly in
templates, to support the widest possible range of types, optimize
template code usage, detect type related user errors, and perform
type inference and transformation at compile time[.](#1.sentence-1)

It includes type
classification traits, type property inspection traits, and type
transformations[.](#1.sentence-2)

The type classification traits describe a complete taxonomy
of all possible C++ types, and state where in that taxonomy a given
type belongs[.](#1.sentence-3)

The type property inspection traits allow important
characteristics of types or of combinations of types to be inspected[.](#1.sentence-4)

The
type transformations allow certain properties of types to be manipulated[.](#1.sentence-5)

[2](#2)

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

All functions specified in [[type.traits]](type.traits "21.3 Metaprogramming and type traits") are signal-safe ([[support.signal]](support.signal "17.14.5 Signal handlers"))[.](#2.sentence-1)
