Название уже есть вопрос.
Более подробная информация: стандартная версия:
Если за последним ключом перечисляется спецификатор вложенных имен, спецификатор перечисления должен ссылаться на перечисление, которое ранее объявлялось непосредственно в классе или пространстве имен, к которому относится спецификатор вложенных имен (т.е. ни унаследованный, ни введенный с помощью объявления-объявления), и спецификатор перечисления должен появиться в пространстве имен включая предыдущую декларацию.
в пункте 7.2, пункт 4. Например, это запрещает forward-declare перечисление, определенное внутри класса:
struct S{
enum foo{A, B};
};
теперь S
может быть объявлен вперед, а S::foo
- нет.
Вопрос о том, почему. Есть ли ситуация, когда это правило может быть выгодным? Зачем это нужно? Или, если вы предпочитаете: если в стандарте не было этого правила, возникает ли ситуация, когда у компилятора возникнет проблема? Какой из них?