std::type_identity
Определено в заголовке <type_traits> | ||
|---|---|---|
template< class T > struct type_identity; | (с C++20) |
Предоставляет член typedef type , который обозначает T (то есть, тождественное преобразование).
Поведение программы, добавляющей специализации для std::type_identity, не определено.
Типы-члены
| Имя | Определение |
|---|---|
type | T |
Вспомогательные типы
template< class T > using type_identity_t = typename type_identity<T>::type; | (с C++20) |
Возможная реализация
template<class T>
struct type_identity { using type = T; }; |
Примечания
std::type_identity можно использовать для установления не выводимых контекстов в выводе шаблонов аргументов.
| Макрос проверки наличия функции | Значение | Std | Функция |
|---|---|---|---|
__cpp_lib_type_identity | 201806L | (C++20) |
std::type_identity |
Пример
#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>
}Вывод:
5.2
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/type_identity