#include <type_traits>
enum class MyEnum
{
Hello
};
template <typename T, typename Enable = void>
class MyClass
{
public:
MyClass(T obj) : e(obj)
{}
private:
T e;
};
template <typename T>
class MyClass <T,
typename std::enable_if< std::is_enum<T>::value
&& std::is_same<typename std::underlying_type<T>::type,
int>::value>::type >
{
public:
MyClass(T obj) : e(obj)
{}
private:
T e;
};
int main()
{
MyClass<MyEnum> c(MyEnum::Hello);
MyClass<int> c1(1); //does not compile due to std::underlying_type
return 0;
}
#include <type_traits>
enum class MyEnum
{