2011-10-16 20 views
12

considerare questo unoI membri di "classe enum" sono istanziati immediatamente o successivamente quando vengono utilizzati?

template<typename T> 
struct A { 
    enum class X { 
    V = T() 
    }; 
}; 

Per le classi di membro e funzioni membro, C++ 11 (e C++ 03) non si istanziare la loro definizione a meno che non li usiamo in un modo che richiede la loro definizione. È vero per enum class?

// valid? 
A<std::string> a; 

Purtroppo, non posso verificare compilatori, poiché C++ 11 è appena fuori dalla porta e tutto ciò che non è affidabile ma, a quanto pare.

+0

Non penso che 'A a;' sia valido a meno che 'std :: string' possa essere convertito implicitamente in' int'. Ma poi di nuovo ... – Florian

risposta

10

Penso di sì. 14.7.1/1

l'istanza implicita di una specializzazione template di classe fa sì che l'implicita esemplificazione delle dichiarazioni, ma non delle definizioni o di default argomenti, di [...] con ambito enumerazioni membri

+1

Grazie! Segnalato come http://llvm.org/bugs/show_bug.cgi?id=10044 e http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49224. –

Problemi correlati