具有作用域枚举的位集无法编译

bitset with scoped enums doesn't compile

本文关键字:编译 作用域 枚举      更新时间:2023-10-16

我正试图将std::bitsetenum一起使用,但我遇到了一个编译错误,称

模板参数1是无效的

有趣的是,当我在没有枚举范围的情况下使用任何枚举值时,它都可以正常工作。

你知道为什么吗?

低于代码

   enum MyTypes {
     Alpha  = 1,
     Beta  = 2,
     Gamma = 3
   };

   std::bitset<MyTypes::Alpha> bitset_wrong; // It doesn't compile.
   std::bitset<Alpha >         bitset_good;  // It works.

似乎您有一个旧的编译器,它不支持使用未带范围的枚举器指定限定名称。

更新编译器。:)

您显示的代码是符合C++2011标准的有效代码。

这里引用了C++标准的一个例子(7.2枚举声明)

11在立即包含枚举说明符的作用域。每个作用域枚举器是在枚举的作用域中声明的。这些名称遵守(3.3)和(3.4)中为所有名称定义的范围规则。

[示例:

enum direction { left=’l’, right=’r’ };
void g() {
direction d; // OK
d = left; // OK
d = direction::right; // OK
}