Создание функции для сравнения типов двух значений

Сравните выведенные шаблонные типы через 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 решает другую задачу.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее