2010-11-05 5 views
6

!: S'il vous plaît noter que je parle de non étiqueté déclarations. Je sais que c'est un terme peut-être informel et ce que je veux dire par là, c'est que la déclaration n'est pas un typedef et qu'elle ne déclare pas un objet de type anonyme. Dans ces cas, tout est clair.anonyme classes non étiquetées vides, structures, unions, et enums

Question 1:
lequel des éléments suivants est un programme C++ bien formé? (À choix multiples)

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

Remarques:
MSVC9.0 accepte tous les trois. Sur le numéro un, il donne un avertissement. Sur les numéros deux et trois, nous obtenons 0 erreurs et 0 avertissements. Le comeau en ligne accepte seulement le numéro trois, les numéros un et deux ne parviennent pas à compiler avec un message de diagnostic "déclaration ne déclare rien". Si, au numéro deux, l'énumération anonyme contient au moins un énumérateur, le numéro deux est légitimement accepté par le compilateur comeau.

Si le compilateur comeau est correct, et c'est le comportement standard, alors je vois une certaine incohérence. Je peux comprendre pourquoi le numéro un devrait être rejeté. Je comprendrais aussi pourquoi le numéro deux devrait être rejeté (ne déclare rien), mais dans ce cas le numéro trois devrait être également rejeté. Et si le numéro trois ne doit pas être rejeté, alors la seule différence que je vois avec le numéro un est que la portée des membres d'une union anoymous est la portée extérieure. Mais c'est également le cas avec les enums, donc, je prétends que si le numéro trois devait être accepté, alors le numéro deux devrait l'être.

Question 2:
Si comeau est correct, quelles sont les considérations que je manque à mon avis ci-dessus?

P.S. J'ai écrit un e-mail au soutien de Comeau. Je posterai leur réponse dès que je l'aurai.

Répondre

3

Rien de tout cela n'est légal. Voir [dcl.dcl] paragraphe 3.

+0

Avec un exemple réel pour 'enum {};', pas moins! Je suis un avocat en langue wannabe. – Cubbi

Questions connexes