Я подозреваю, что вы хотите что-то вроде этого:
#include <typeinfo>
template <typename T>
void print_type()
{
std::cout << typeid(T).name() << std::endl;
}
int main()
{
print_type<float>();
print_type<int>();
}
Обратите внимание, что значение typeid(T).name()
определяется реализацией и может вообще не иметь значения.Невозможно гарантированно распечатать тип без написания функции для каждого типа самостоятельно.
Вы можете сделать перегрузку, которая также выводит тип выражения:
#include <typeinfo>
template <typename T>
void print_type(const T&)
{
std::cout << typeid(T).name() << std::endl;
}
int main()
{
print_type(5.0f);
print_type(5.0);
}
(Обратите внимание, что это оценивает выражение, которое не нужно, но я сомневаюсь, что это вызывает беспокойство.)