◐ Shell
clean mode source ↗

std::type_identity — cppreference.com

Материал из cppreference.com

<tbody> </tbody>

template< class T > struct type_identity;

(начиная с C++20)

Предоставляет typedef элемент type с именем T (т.е. преобразование идентичности).

Поведение программы, добавляющей специализации для std::type_identity не определено.

Типы элементы

Вспомогательные типы

<tbody> </tbody>

template< class T > using type_identity_t = typename type_identity<T>::type;

(начиная с C++20)

Возможная реализация

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

Примечание

type_identity можно использовать для установления невыведенных контекстов при выводе аргументов шаблона.

Макрос Тестирования функциональности Значение Стандарт Функциональность
__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); // ошибка, выведены конфликтующие типы для 'T'
  std::cout << bar(4.2, 1) << '\n';  // OK, вызывает bar<double>
}

Вывод: