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