2010-11-05 18 views
6

! Descargo de responsabilidad!: Tenga en cuenta que estoy hablando de declaraciones sin etiquetar. Sé que es un término posiblemente informal y lo que quiero decir es que la declaración no es un typedef y no declara un objeto de tipo anónimo. En estos casos, todo está claro.anónimo clases, estructuras, uniones y enumeraciones vacías sin etiquetar

Pregunta 1:
cuál de los siguientes es un programa bien formada C++? (Opción múltiple)

//One 
int main(){ 
    struct{}; //or class{}; should be the same 
} 
//Two 
int main(){ 
    enum{}; 
} 
//Three 
int main(){ 
    union{}; 
} 

Observaciones:
MSVC9.0 acepta los tres. En el número uno, da una advertencia. En el número dos y tres obtenemos 0 errores y 0 advertencias. El comeau en línea solo acepta el número tres, los números uno y dos no compilan con un mensaje de diagnóstico "la declaración no declara nada". Si, en el número dos, la enumeración anónima contiene al menos un enumerador, el compilador de comeau acepta legítimamente el número dos.

Si el compilador de comeau es correcto, y este es el comportamiento estándar, entonces veo cierta incoherencia en él. Puedo entender por qué el número uno debe ser rechazado. También entendería por qué el número dos debería ser rechazado (no declara nada), pero en este caso el número tres también debería ser rechazado. Y si el número tres no debe ser rechazado, entonces la única diferencia que veo con el número uno es que el alcance de los miembros de una unión anónima es el alcance externo. Pero ese también es el caso con las enumeraciones, entonces, mi reclamo es que si se aceptara el número tres entonces también debería ser el número dos.

Pregunta 2:
Si Comeau es correcta, ¿qué consideraciones me estoy perdiendo a mi juicio anterior?

P.S. He escrito un correo electrónico para el apoyo de comeau. Publicaré su respuesta tan pronto como lo reciba.

Respuesta

3

Nada de eso es legal. Ver [dcl.dcl] párrafo 3.

+0

Con un ejemplo real para 'enum {};', ¡no menos! Soy un aspirante a intérprete de idiomas. – Cubbi

Cuestiones relacionadas