Как в C++ реализовать ассиацию из типов под SFINAE?

Как в C++ реализовать категорию типов с примерами SFINAE (std::enable_if, std::is_integral)? Например, требуется чтобы структура при вызове get_type::type = integer имела ассоциацию из типов перечислений.

Вот код

enum type_t {
   integer,
   other
};

//Default
template <typename T>
struct get_type {
    static constexpr type_t type = other;
};
// For integer 
template <>
struct get_type<int> {
    static constexpr type_t type = integer;
};

Мне например не хочется заполнять для каждого примитивного типа int, unsigned int, long (etc.) и попробую использовать std::is_integral, как это сделать?


Ответы (1 шт):

Автор решения: Harry

А если не усложнять, то годится?

template<typename T>
struct get_type
{
    static constexpr type_t type = is_integral_v<T> ? integer : other;
};

См. https://ideone.com/S2Ix3b - там, правда, в связи с более старой версией использован is_integral<T>::value.

→ Ссылка