Это ошибка в gcc 1 .Соответствующая формулировка в [expr.ref] p2 :
В любом случае, id-выражение [здесь: EnumClass::one
] должно называтьсячлен класса или одного из его базовых классов.
EnumClass::one
не относится к члену класса, это член перечисления.Неважно, является ли это перечисление частью класса, просто член one
сам не является частью класса.
Но является ли Enum::one
частью класса?Да, согласно [class.member] p1 :
Членами класса являются члены данных, функции-члены, вложенные типы, перечислители, а также шаблоны элементов и их специализации.
и сделан более явным в [class.member] p3 :
Перечислители перечисления с незаданной областью, определенные в классе, являются членами класса.
1 : Я бы даже зашел так далеко, что назвал это ошибкой в стандарте, поскольку, кажется, нет (технической) причиныпочему это должно быть запрещено, и я думаю, что было бы неплохо разрешить это.Хотя есть разговоры о том, чтобы разрешить это, так что давайте посмотрим, что решит комитет.