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] | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |