Сравните выведенные шаблонные типы через std::is_same. Нужно заранее решить, считаются ли const и ссылки существенными: обычно для такого вопроса сравнивают базовые типы значений.
Создание функции для сравнения типов двух значений
Сравните выведенные шаблонные типы через std::is_same. Нужно заранее решить, считаются ли const и ссылки существенными: обычно для такого вопроса сравнивают базовые типы значений.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Напишите функцию, получающую два аргумента и возвращающую true, если их типы совпадают, и false в противном случае.
Ответ
Сравните выведенные шаблонные типы через std::is_same. Нужно заранее решить, считаются ли const и ссылки существенными: обычно для такого вопроса сравнивают базовые типы значений.
Вариант C++20 без учёта cv-квалификаторов и ссылок:
#include <type_traits>
template<class A, class B>
constexpr bool sameType(A&&, B&&) {
return std::is_same_v<std::remove_cvref_t<A>, std::remove_cvref_t<B>>;
}
Для 1 и 2 результат true, для 1 и 2.0 — false. Это сравнение статических типов, а не фактического производного типа объекта через базовую ссылку. Если нужны квалификаторы, уберите соответствующее преобразование; typeid решает другую задачу.