анонимные пустые непомеченные классы, структуры, союзы и перечисления - PullRequest
6 голосов
/ 05 ноября 2010

! Отказ от ответственности! : Обратите внимание, что я имею в виду без тегов деклараций.Я знаю, что это возможно неформальный термин, и под этим я подразумеваю, что объявление не является typedef и не объявляет объект анонимного типа.В этих случаях все ясно.

Вопрос 1:
Что из следующего является правильно построенной программой C ++?(множественный выбор)

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

Примечания:
MSVC9.0 принимает все три.На номер один это дает предупреждение.На номер два и три мы получаем 0 ошибок и 0 предупреждений.Онлайн-комедия принимает только номер три, номера один и два не компилируются с диагностическим сообщением «объявление ничего не объявляет».Если номер два в анонимном перечислении содержит хотя бы один перечислитель, номер два по праву принимается компилятором comeau.

Если компилятор comeau корректен, и это стандартное поведение, то я вижу в этом некоторую несогласованность.Я могу понять, почему номер один должен быть отклонен.Я также понял бы, почему номер два должен быть отклонен (ничего не заявляет), но в этом случае номер три также должен быть отклонен.И если номер три не должен быть отклонен, то единственное отличие, которое я вижу с номером один, состоит в том, что область действия членов аномального союза - это внешняя область.Но это также относится и к перечислениям, поэтому я утверждаю, что если принять номер три, то и номер два.

Вопрос 2:
Если comeau isправильно, какие соображения я упускаю в своем решении?

PS Я написал письмо в службу поддержки Comeau.Я опубликую их ответ, как только получу.

1 Ответ

3 голосов
/ 05 ноября 2010

Ничто из этого не является законным. См. [Dcl.dcl] параграф 3.

...