Sto cercando di capire enum che è stato definito con gli specificatori del nome nidificato. Ciò che la norma dice è N4296:7.2/4 [dcl.enum]
:Enum introdotto usando la dichiarazione
Se il tasto enum è seguito da un nested-nome-identificatore, il enum-specificatore deve fare riferimento a un'enumerazione che in precedenza era dichiarati direttamente nella classe o spazio dei nomi di che il nested-nome-specificatore riferisce (cioè né ereditato né introdotto da una dichiarazione using), e l'enumerazione-specificatore apparirà in uno spazio racchiudente dichiarazione precedente.
Bene, perché funziona il seguente esempio, quindi?
#include <iostream>
namespace A
{
namespace B
{
enum E : int;
}
}
namespace C
{
using A::B::E;
}
enum C::E : int { x = 2 };
int main()
{
}
Nel namescape C
, abbiamo dichiarato enum E
utilizzando dichiarazione, e quindi di cui con la definizione enum. Il compilatore potrebbe aver generato un errore, ma non l'ha fatto. Cosa c'era di sbagliato, dov'era l'incomprensione?
Sembra che tu abbia trovato un bug del compilatore. –
@ T.C. Quindi, in generale, il seguente codice non dovrebbe funzionare troppo http://coliru.stacked-crooked.com/a/b4e682437a639a1b giusto? –
@ T.C. Non potresti avere un esempio con l'eredità? –