Consider this code:
enum CEnum {
V1, V2;
};
enum class CppEnum {
V1, V2;
};
Both std::is_enum<CEnum>::value and std::is_enum<CppEnum>::value is true.
I'm now searching for something like std::is_enum_class<T>::value to tell them apart.