std::is_enum_v<std::byte> 计算结果为 true

Moh*_* Li 2 c++ enums type-traits std-byte

根据标准参考std::is_enum_v枚举类型的计算结果为 true,否则为 false。枚举类型以枚举键开头,即枚举、枚举类或枚举结构之一。

编写了以下测试程序:

#include <type_traits>
#include <iostream>

using to_examine = std::byte;

enum class Foo {
    ONE,
    TWO 
};

int main() {
    if constexpr (std::is_enum_v<std::byte>) {
        std::cout << "byte counts as enum" << std::endl;
    }   

    if constexpr(std::is_enum_v<int>) {
        std::cout << "int counts as enum" << std::endl;
    }   

    if constexpr(std::is_enum_v<Foo>) {
        std::cout << "scoped enum counts as enum" << std::endl;
    }   
}
Run Code Online (Sandbox Code Playgroud)

打印出以下内容:

byte counts as enum
scoped enum counts as enum
Run Code Online (Sandbox Code Playgroud)

我正在使用 clang15 和 g++12。这是一个错误还是一个功能?

woh*_*tad 7

std::byte由标准定义为枚举类型。

请参阅std::byte文档

enum class byte : unsigned char {};   // (since C++17) 
Run Code Online (Sandbox Code Playgroud)

如果您对这样定义的原因感兴趣,这里有一些信息: