为何std::is_enum_v<std::byte>返回true?是Bug还是特性?
为什么
std::is_enum_v<std::byte>会返回true? 根据C标准,std::is_enum_v仅对通过enum、enum class或enum struct定义的枚举类型返回true,非枚举类型返回false。但测试发现,std::byte会被std::is_enum_v识别为枚举类型,在clang15和g12下的测试程序输出如下:
测试代码:
#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
这是特性,而非Bug。因为C++17标准中,std::byte的官方定义就是一个作用域枚举类型:
enum class byte : unsigned char {};
它完全符合std::is_enum_v的判定条件,因此编译器返回true是严格遵循标准的行为。
内容的提问来源于stack exchange,提问作者Mohammed Li
相关产品推荐
相关产品推荐

