<type_traits>

Definiert Vorlagen für Kompilierungszeitkonstanten, die Informationen zu den Eigenschaften ihrer Typargumente liefern oder transformierte Typen erzeugen.

Syntax

#include <type_traits>

Hinweise

Die Klassen und Vorlagen in <type_traits> werden verwendet, um die Typableitung, Klassifizierung und Transformation zur Kompilierungszeit zu unterstützen. Sie werden auch verwendet, um Typfehler zu erkennen und Ihnen bei der Optimierung des generischen Codes zu helfen. Unäre Typeigenschaften beschreiben eine Eigenschaft eines Typs, binäre Typeigenschaften beschreiben eine Beziehung zwischen Typen und Transformationseigenschaften ändern eine Eigenschaft eines Typs.

Die Hilfsklasse integral_constant und die Vorlagenspezialisierungen true_type und false_type bilden die Basisklassen für Typprädikate. Ein Typprädikat ist eine Vorlage, die ein oder mehrere Typargumente entgegennimmt. Wenn ein Typprädikat "true" enthält, wird es öffentlich direkt oder indirekt von true_type abgeleitet. Wenn ein Typprädikat "false" enthält, wird es öffentlich direkt oder indirekt von false_type abgeleitet.

Ein Typmodifizierer oder Transformationsmerkmal ist eine Vorlage, die ein oder mehrere Vorlagenargumente entgegennimmt und über einen Member type verfügt, der ein Synonym für den geänderten Typ ist.

Alias-Vorlagen

Um Typeneigenschaftenausdrücke zu vereinfachen, werden Aliasvorlagen bereitgestellt typename some_trait<T>::type , bei denen some_trait der Name der Klassenvorlage ist. Zum Beispiel verfügt add_const über eine Aliasvorlage für seinen Typ add_const_t, definiert als:

template <class T>
using add_const_t = typename add_const<T>::type;

Dies sind die bereitgestellten Aliase für die type Mitglieder:

add_const_t
add_cv_t
add_lvalue_reference_t
add_pointer_t
add_rvalue_reference_t
add_volatile_t
aligned_storage_t
aligned_union_t\

common_type_t
conditional_t
decay_t
enable_if_t
invoke_result_t
make_signed_t
make_unsigned_t
remove_all_extents_t\

remove_const_t
remove_cv_t
remove_extent_t
remove_pointer_t
remove_reference_t
remove_volatile_t
result_of_t
underlying_type_t\

Klassen

Hilfsprogrammklasse und Typedefs

Name Beschreibung
integral_constant Wandelt einen Typ und einen Wert in eine Ganzzahlkonstante um.
true_type Enthält eine Ganzzahlkonstante mit einem wahren Wert.
false_type Enthält eine Ganzzahlkonstante mit einem falschen Wert.

Primäre Typkategorien

Name Beschreibung
is_void Testet, ob der Typ void ist.
is_null_pointer Testet, ob der Typ std::nullptr_t ist.
is_integral Testet, ob der Typ eine Ganzzahl ist.
is_floating_point Testet, ob der Typ ein Gleitkomma ist.
is_array Testet, ob der Typ ein Array ist.
is_pointer Testet, ob der Typ ein Zeiger ist.
is_lvalue_reference Testet, ob es sich beim Typ um einen lvalue-Verweis handelt.
is_rvalue_reference Testet, ob es sich beim Typ um einen „rvalue“-Verweis handelt.
is_member_object_pointer Testet, ob der Typ ein Zeiger auf ein Memberobjekt ist.
is_member_function_pointer Testet, ob der Typ ein Zeiger auf eine Memberfunktion ist.
is_enum Testet, ob der Typ eine Aufzählung ist.
is_union Testet, ob der Typ eine Union ist.
is_class Testet, ob der Typ eine Klasse ist.
is_function Testet, ob der Typ ein Funktionstyp ist.

Zusammengesetzte Typkategorien

Name Beschreibung
is_reference Testet, ob der Typ ein Verweis ist.
is_arithmetic Testet, ob der Typ arithmetisch ist.
is_fundamental Testet, ob der Typ void oder arithmetisch ist.
is_object Testet, ob der Typ ein Objekttyp ist.
is_scalar Testet, ob der Typ skalar ist.
is_compound Testet, ob der Typ nicht skalar ist.
is_member_pointer Testet, ob der Typ ein Zeiger auf ein Member ist.

Typeigenschaften

Name Beschreibung
is_const Testet, ob der Typ const ist.
is_volatile Testet, ob der Typ volatile ist.
is_trivial Testet, ob der Typ trivial ist.
is_trivially_copyable Testet, ob der Typ trivial kopierbar ist.
is_standard_layout Testet, ob der Typ ein Standardlayouttyp ist.
is_pod Testet, ob der Typ ein POD-Typ ist.
is_literal_type Testet, ob der Typ eine constexpr-Variable sein oder in einer constexpr-Funktion verwendet werden kann.
is_empty Testet, ob es sich bei dem Typ um eine leere Klasse handelt.
is_polymorphic Testet, ob der Typ eine polymorphe Klasse ist.
is_abstract Testet, ob es dich bei dem Typ um eine abstrakte Klasse handelt.
is_final Testet, ob der Typ ein als final markierter Klassentyp ist.
is_aggregate
is_signed Testet, ob der Typ eine Ganzzahl mit einem Vorzeichen ist.
is_unsigned Testet, ob der Typ eine Ganzzahl ohne Vorzeichen ist.
is_constructible Testet, ob der Typ konstruiert werden kann, wenn die angegebenen Argumenttypen verwendet werden.
is_default_constructible Testet, ob der Typ über einen Standardkonstruktor verfügt.
is_copy_constructible Testet, ob der Typ über einen Kopierkonstruktor verfügt.
is_move_constructible Testet, ob der Typ einen Bewegungskonstruktor aufweist.
is_assignable Testet, ob dem ersten Typ ein Wert des zweiten Typs zugewiesen werden kann.
is_copy_assignable Testet, ob einem Typ ein konstanter Verweiswert des Typs zugewiesen werden kann.
is_move_assignable Testet, ob einem Typ ein rvalue-Verweis des Typs zugewiesen werden kann.
is_swappable
is_swappable_with
is_destructible Testet, ob der Typ „destructible“ ist.
is_trivially_constructible Testet, ob der Typ keine nicht trivialen Vorgänge verwendet, wenn er mit den angegebenen Typen konstruiert wird.
is_trivially_default_constructible Testet, ob der Typ keine nicht trivialen Vorgänge verwendet, wenn er standardmäßig konstruiert wird.
is_trivially_copy_constructible Testet, ob der Typ keine nicht trivialen Vorgänge verwendet, wenn er durch Kopie konstruiert wird.
is_trivially_move_constructible Testet, ob der Typ keine nicht trivialen Vorgänge verwendet, wenn er durch Bewegung konstruiert wird.
is_trivially_assignable Testet, ob die Typen zugewiesen werden können und bei der Zuweisung keine nicht trivialen Vorgänge verwendet werden.
is_trivially_copy_assignable Testet, ob der Typ durch Kopie zugewiesen werden kann und bei der Zuweisung keine nicht trivialen Vorgänge verwendet werden.
is_trivially_move_assignable Prüft, ob dem Typ eine Verschiebung zugewiesen werden kann und bei der Zuweisung keine nicht trivialen Vorgänge verwendet werden.
is_trivially_destructible Testet, ob der Typ zerstörbar ist und der Destruktor keine nicht trivialen Vorgänge verwendet.
is_nothrow_constructible Testet, ob der Typ konstruiert werden kann und keine Ausnahmefehler auslöst, wenn er mit den angegebenen Typen konstruiert wird.
is_nothrow_default_constructible Testet, ob der Typ standardmäßig konstruiert werden kann und keine Ausnahmefehler auslöst, wenn er standardmäßig konstruiert wird.
is_nothrow_copy_constructible Testet, ob der Typ durch Kopie konstruiert werden kann und der Kopierkonstruktor keine Ausnahmefehler auslöst.
is_nothrow_move_constructible Testet, ob der Typ durch Bewegung konstruiert werden kann und der Bewegungskonstruktor keine Ausnahmefehler auslöst.
is_nothrow_assignable Testet, ob der Typ mit dem angegebenen Typ zugewiesen werden kann und die Zuweisung keine Ausnahmefehler auslöst.
is_nothrow_copy_assignable Testet, ob der Typ durch Kopie zugewiesen werden kann und die Zuweisung keine Ausnahmefehler auslöst.
is_nothrow_move_assignable Prüft, ob dem Typ eine Verschiebung zugewiesen werden kann und die Zuweisung keine Ausnahmefehler auslöst.
is_nothrow_swappable
is_nothrow_swappable_with
is_nothrow_destructible Testet, ob der Typ zerstörbar ist und der Destruktor keine Ausnahmefehler auslöst.
has_virtual_destructor Testet, ob der Typ einen virtuellen Destruktor aufweist.
has_unique_object_representations
is_invocable Testet, ob ein aufrufbarer Typ mithilfe der angegebenen Argumenttypen aufgerufen werden kann.
In C++17 hinzugefügt.
is_invocable_r Testet, ob ein aufrufbarer Typ mithilfe der angegebenen Argumenttypen aufgerufen werden kann und das Ergebnis in den angegebenen Typ konvertierbar ist.
In C++17 hinzugefügt.
is_nothrow_invocable Testet, ob ein aufrufbarer Typ mithilfe der angegebenen Argumenttypen aufgerufen werden kann und dass keine Ausnahmen ausgelöst werden.
In C++17 hinzugefügt.
is_nothrow_invocable_r Testet, ob ein aufrufbarer Typ mithilfe der angegebenen Argumenttypen aufgerufen werden kann und dass keine Ausnahmen ausgelöst werden, und das Ergebnis wird in den angegebenen Typ umsetzbar.
In C++17 hinzugefügt.

Typeigenschaftsabfragen

Name Beschreibung
alignment_of Ruft die Ausrichtung eines Typs ab.
rank Ruft die Anzahl von Arraydimensionen ab.
extent Ruft die Anzahl der Elemente in der angegebenen Arraydimension ab.

Typbeziehungen

Name Beschreibung
is_same Stellt fest, ob zwei Typen identisch sind.
is_base_of Testet, ob ein Typ die Basis eines anderen ist.
is_convertible Testet, ob ein Typ in einen anderen konvertiert werden kann.

Änderungen flüchtiger Konstanten

Name Beschreibung
add_const Wandelt den Typ in einen const-Typ um.
add_volatile Wandelt den Typ in einen volatile-Typ um.
add_cv Wandelt den Typ in einen const volatile-Typ um.
remove_const Wandelt den Typ in einen nicht konstanten Typ um.
remove_volatile Wandelt den Typ in einen nicht flüchtigen Typ um.
remove_cv Wandelt den Typ in einen nicht konstanten nicht flüchtigen Typ um.

Verweisänderungen

Name Beschreibung
add_lvalue_reference Wandelt den Typ in einen Verweis auf den Typ um.
add_rvalue_reference Wandelt den Typ in einen rvalue-Verweis auf den Typ um
remove_reference Wandelt den Typ in einen Typ ohne Verweis um.

Vorzeichenmanipulation

Name Beschreibung
make_signed Erzeugt bei einem signierten Typ den Typ und andernfalls den kleinsten signierten Typ größer oder gleich dem Typ.
make_unsigned Erzeugt bei einem unsignierten Typ den Typ und andernfalls den kleinsten unsignierten Typ größer oder gleich dem Typ.

Arrayänderungen

Name Beschreibung
remove_all_extents Wandelt einen Arraytyp in einen Nichtarraytyp um.
remove_extent Wandelt einen Arraytyp in einen Elementtyp um.

Zeigeränderungen

Name Beschreibung
add_pointer Wandelt den Typ in einen Zeiger auf den Typ um.
remove_pointer Wandelt einen Zeiger auf den Typ in einen Typ um.

Weitere Transformationen

Name Beschreibung
aligned_storage Weist nicht initialisierten Arbeitsspeicher für eine ausgerichteten Typ zu.
aligned_union Weist den nicht initialisierten Arbeitsspeicher für eine ausgerichtete Union mit einem nicht trivialen Konstruktor oder Destruktor zu.
common_type Wandelt alle Typen des Parameterpakets in einen gemeinsamen Typ um.
conditional Wenn die Bedingung TRUE ist, wird der erste angegebene Typ erzeugt, andernfalls der zweite angegebene Typ.
decay Erzeugt den Typ bei der Übergabe durch einen Wert. Erstellt einen non-reference-, non-const- oder non-volatile-Typ oder erstellt einen Zeiger auf den Typ.
enable_if Wenn die Bedingung TRUE ist, wird der angegebene Typ erzeugt, andernfalls kein Typ.
invoke_result Bestimmt den Rückgabetyp des aufrufbaren Typs, der die angegebenen Argumenttypen akzeptiert.
In C++17 hinzugefügt.
result_of Bestimmt den Rückgabetyp des aufrufbaren Typs, der die angegebenen Argumenttypen akzeptiert.
In C++14 wurde in C++17 veraltet.
underlying_type Erzeugt für einen Enumerationstyp den zugrunde liegenden ganzzahligen Typ.

Logische Operatoreigenschaften

Name Beschreibung
Verbindung
Disjunktion
Negation

Siehe auch

<functional>