【发布时间】:2018-04-25 17:16:34
【问题描述】:
考虑以下代码:
struct S {
enum class EnumClass {
one
} ;
enum Enum {
one
};
};
int main()
{
S s;
S::EnumClass e = s.EnumClass::one; // <- Doesn't compile with clang
S::Enum e11 = s.Enum::one;
S::Enum e12 = s.one;
}
一切都适用于 GCC,但 clang(3.8 和 3.9 都不是)无法编译 s.EnumClass::one,出现错误:'S::EnumClass::one' is not a member of class 'S'。
鉴于无作用域枚举工作正常,这似乎是一个错误。
【问题讨论】:
-
有趣... Visual Studio 将愉快地编译它而不会发出警告,但智能感知会突出显示与 Clang 相同的错误。巧合?
-
@Rakete1111 但也许枚举值可以被视为封闭类的成员(某种静态?)。
-
@HolyBlackCat 参见 [class.member]p1 和 p3。他们被认为是班级的成员,听起来很奇怪。
-
那么应该如何访问嵌套的(枚举)类成员呢?
标签: c++ clang language-lawyer