为什么 is_convertible<EnumClass, int> 返回 false?

ber*_*ers 2 c++ enums type-traits

我不明白为什么std::is_convertible_v<EnumClass, int>在这个例子中返回 false,特别是考虑到它static_cast<int>(enumClassValue)工作正常。

#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;
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*lia 7

std::is_convertible_v<From, To>true如果 type 的值From可以隐式转换为 type ,则返回To

https://en.cppreference.com/w/cpp/types/is_convertible

如果虚函数定义格式To test() { return std::declval<From>(); }正确(即,std::declval<From>()可以使用隐式转换进行转换To,或者两者FromTo可以进行 cv 限定void),则提供等于 的成员常量值true。否则值为false.

类型的值enum class(与常规enum类型不同)需要显式转换才能执行该转换;因此,返回的值is_convertible_v是正确的。