I don't understand why std::is_convertible_v<EnumClass, int> returns false in this example, especially given that static_cast<int>(enumClassValue) works correctly.
#include <iostream>
enum Enum {X = 5};
enum class EnumClass {X = 5};
int main() {
Enum enumValue = Enum::X;
std::cout << static_cast<int>(enumValue) << std::endl;
std::cout << std::is_convertible_v<Enum, int> << std::endl;
EnumClass enumClassValue = EnumClass::X;
std::cout << static_cast<int>(enumClassValue) << std::endl;
std::cout << std::is_convertible_v<EnumClass, int> << std::endl;
return 0;
}
std::is_convertible_v<From, To>returnstrueif a value of typeFromis implicitly convertible to typeTo.https://en.cppreference.com/w/cpp/types/is_convertible
Values of
enum classtypes (unlike regularenums) require an explicit conversion to perform that conversion; hence, the valued returned byis_convertible_vis correct.