!免责声明!
:请注意,我说的是
未标记的
声明。我知道这可能是一个非正式的术语,我的意思是声明不是typedef,也不声明匿名类型的对象。在这些情况下,一切都很清楚。
问题1:
下面哪一个是一个格式良好的C++程序?(多选)
//One
int main(){
struct{}; //or class{}; should be the same
}
//Two
int main(){
enum{};
}
//Three
int main(){
union{};
}
评论:
MSVC9.0接受这三个选项。在第一位,它给出警告。在数字2和3上,我们得到0个错误和0个警告。在线COMEAU只接受数字3,数字1和数字2无法编译,并显示诊断消息“声明不声明任何内容”。如果在数字2中,匿名枚举包含至少一个枚举器,则COMEAU编译器正确地接受数字2。
如果comeau编译器是正确的,并且这是标准行为,那么我会看到其中有一些不一致。我能理解为什么第一个应该被拒绝。我也理解为什么第二个应该被拒绝(什么都不声明),但在这种情况下,第三个也应该被拒绝。如果第三个不应该被拒绝,那么我看到与第一个不同的是,一个反常的联盟的成员的范围是外部的。但对于Enums也是这样,所以我的主张是,第三个应该被接受,第二个也应该被接受。
问题2:
如果Comeau是正确的,我在上述判断中遗漏了什么考虑?
另外,我已经给Comeau支持部门写了一封电子邮件。我一拿到答案就把他们的答案贴出来。