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