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

问题描述 投票:0回答:1

根据标准参考

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;
    }   
}

打印出以下内容:

byte counts as enum
scoped enum counts as enum

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

c++ enums typetraits
1个回答
2
投票

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

请参阅

std::byte
文档

枚举类字节:无符号字符{}; (自 C++17 起)

重点是我的

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

std::byte
是枚举类而不是类?.

© www.soinside.com 2019 - 2024. All rights reserved.