C++标准中哪条规则规定枚举项重定义属于不合法行为?
你给出的示例代码:
enum class A{ a = 0, a = 1 };
触发重定义报错的约束规则并不属于ODR(单定义规则)范畴,而是来自C++标准更基础的声明与作用域相关规则:
- 首先
[dcl.enum]章节明确规定:枚举项(enumerator)是其所属枚举类型作用域内的常量实体,每个枚举项的标识符都会在对应枚举的作用域中完成一次声明。 - 其次
[basic.scope.declarative]章节的规范性规则要求:同一作用域内不得声明两个同名的不可重载实体,枚举项不属于允许重载的实体类型,因此不能在同一枚举的作用域内重复声明。
你提到的[basic.def.odr#1]确实没有将枚举项纳入约束范围,因为枚举项重名问题属于声明作用域规则的约束范畴,并不适用ODR规则。
内容的提问来源于stack exchange,提问作者xmh0511
相关产品推荐
相关产品推荐

