анонимные пустые немаркированные классы, структуры, объединения и перечисления

! Отказ от ответственности! : Обратите внимание, что я говорю о немаркированные объявления. Я знаю, что это, возможно, неофициальный термин, и я имею в виду то, что объявление не является 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.

Вопрос 2:
Если comeau верно, то какие соображения я упускаю из моего вышеприведенного суждения?

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

6
задан Armen Tsirunyan 5 November 2010 в 15:02
поделиться