Ответ 1
Вы объявили pair_of_ints
как constexpr
что означает const
:
constexpr
используемый в объявлении объекта, объявляет объект какconst
.
Таким образом, тип pair_of_ints
на самом деле:
const std::pair<int, int>
typeid
игнорирует cv-квалификаторы, поэтому эта информация не появляется в имени:
Если тип выражения или идентификатор типа является cv-квалифицированным типом, результат выражения
typeid
относится к объектуstd::type_info
представляющему cv-unqualified type.
Вы можете либо протестировать тип const- qual, либо отказаться от конструктора- константы, используя std :: remove_const_t:
static_assert(std::is_same<decltype(pair_of_ints),
const std::pair<int, int>>::value);
static_assert(std::is_same<std::remove_const_t<decltype(pair_of_ints)>,
std::pair<int, int>>::value);