std::type_identity - cppreference.com (original) (raw)

| | | | | ------------------------------------------- | | ------------- | | template< class T > struct type_identity; | | (since C++20) |

Provides the member typedef type that names T (i.e., the identity transformation).

If the program adds specializations for std::type_identity, the behavior is undefined.

Contents

[edit] Member types

[edit] Helper types

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

[edit] Possible implementation

template struct type_identity { using type = T; };

[edit] Notes

std::type_identity can be used to establish non-deduced contexts in template argument deduction.

Feature-test macro Value Std Feature
__cpp_lib_type_identity 201806L (C++20) std::type_identity

[edit] Example

#include #include   template T foo(T a, T b) { return a + b; }   template T bar(T a, std::type_identity_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 }

Output:

[edit] See also

| | function object that returns its argument unchanged (class) [edit] | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |