具有作用域枚举的位集无法编译
bitset with scoped enums doesn't compile
我正试图将std::bitset
与enum
一起使用,但我遇到了一个编译错误,称
模板参数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
}
相关文章:
- 未在作用域中声明unordered_map
- 有没有一种方法可以在编译时获得作用域类名
- C++quit()函数中可能存在作用域问题
- 未在此作用域OpenCV3.4中声明cvSaveImage
- 全局作用域中函数指针的赋值
- 在类函数中初始化外部作用域变量
- 不同作用域中的静态变量和全局变量
- 是同一作用域的函数部分中的函数调用
- 未在此作用域中声明的函数和变量 (C++)
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 在编译时选择全局作用域函数
- 为什么要编译无作用域枚举的声明?
- 具有作用域枚举的位集无法编译
- 编译g++时不在作用域内声明
- 模板作用域问题代码无法编译
- 在类作用域内定义方法时,除非在原始 cpp 文件中的其他位置调用方法,否则项目不会编译
- 在Visual Studio 2012中,作用域操作符中的错别字会导致意外的编译和递归
- 在子作用域中重新声明变量不会导致编译错误
- c++在编译时文件作用域对整个程序是全局的吗?
- 和使用声明作用域相同的类声明在GCC中编译,但不在MSVS中编译