template <typename T, bool is_enum = std::is_enum<T>::value>

struct ArithmeticOrUnderlyingEnum

Extracts the underlying type from an enum.