2011-10-16 8 views
12

considerar esto una¿Se instancian los miembros "enum class" inmediatamente o más tarde cuando se usan?

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

Para las clases de miembros y funciones miembro, C++ 11 (03 y C++) no va a crear una instancia de su definición, a menos que los usamos de una manera que requiere su definición. ¿Es esto cierto para enum class?

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

Por desgracia, no puedo comprobar compiladores, ya que C++ 11 es justo fuera de la puerta y todo lo que no es confiable, sin embargo, lo que parece.

+0

No creo que 'A a;' sea válido a menos que 'std :: string' se pueda convertir implícitamente a' int'. Pero, de nuevo ... – Florian

Respuesta

10

Creo que sí. 14.7.1/1

La instanciación implícita de una especialización de plantilla clase hace que la implícita instanciación de las declaraciones, pero no de las definiciones o defecto argumentos, de [...] Scoped enumeraciones miembro

+1

¡Gracias! Reportado como http://llvm.org/bugs/show_bug.cgi?id=10044 y http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49224. –

Cuestiones relacionadas