https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101687
Bug ID: 101687
Summary: Scoped enumerators of a member enumeration shall not
be referred by a class member access expression
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: xmh970252187 at gmail dot com
Target Milestone: ---
struct A{
enum class C{
a = 0
};
};
int main(){
A a;
auto c = a.C::a; //#1
}
> Each enum-name and each unscoped enumerator is declared in the scope that
> immediately contains the enum-specifier.
> An enumerator declared in class scope can be referred to using the class
> member access operators (::, . (dot) and -> (arrow)), see [expr.ref].
According to the above rule, A::C::a shouldn't appear in the id-expression of a
member access expression, which means `#1` should be ill-formed.