Namensräume
Varianten
Aktionen

std::type_identity

Von cppreference.com
< cpp‎ | types
 
 
Metaprogrammierungsbibliothek
Typmerkmale
Typkategorien
(C++11)
(C++11)(DR*)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11) 
(C++11)
(C++11)
Typeneigenschaften
(C++11)
(C++11)
(C++14)
(C++11)(deprecated in C++26)
(C++11)(bis C++20*)
(C++11)(veraltet in C++20)
(C++11)
Typmerkmalskonstanten
Metafunktionen
(C++17)
Unterstützte Operationen
Beziehungen und Eigenschaftsabfragen
Typmodifikationen
(C++11)(C++11)(C++11)
Typentransformationen
(C++11)(veraltet in C++23)
(C++11)(veraltet in C++23)
(C++11)
(C++11)(bis C++20*)(C++17)

(C++11)
type_identity
(C++20)
(C++11)
(C++17)
Rationale Arithmetik zur Compilezeit
Ganzzahlsequenzen zur Compilezeit
 
Definiert in der Kopfdatei <type_traits>
template< class T >
struct type_identity;
(seit C++20)

Stellt den Member-Typedef type bereit, der T benennt (d. h. die Identitätstransformation).

Wenn das Programm Spezialisierungen für std::type_identity hinzufügt, ist das Verhalten undefiniert.

Inhalt

[bearbeiten] Member-Typen

Name Definition
type T

[bearbeiten] Hilfstypen

template< class T >
using type_identity_t = type_identity<T>::type;
(seit C++20)

[bearbeiten] Mögliche Implementierung

template<class T>
struct type_identity { using type = T; };

[bearbeiten] Hinweise

std::type_identity kann verwendet werden, um nicht abgeleitete Kontexte bei der Vorlagenargumentableitung zu etablieren.

Feature-Test-Makro Wert Std Feature
__cpp_lib_type_identity 201806L (C++20) std::type_identity

[bearbeiten] Beispiel

#include <iostream>
#include <type_traits>
 
template<class T>
T foo(T a, T b) { return a + b; }
 
template<class T>
T bar(T a, std::type_identity_t<T> b) { return a + b; }
 
int main()
{
    // foo(4.2, 1); // error, deduced conflicting types for 'T'
    std::cout << bar(4.2, 1) << '\n';  // OK, calls bar<double>
}

Ausgabe

5.2

[bearbeiten] Siehe auch

(C++20)
Funktions-Objekt, das sein Argument unverändert zurückgibt
(Klasse) [bearbeiten]