C++ 匿名空的未标记类、结构、联合和枚举

C++ 匿名空的未标记类、结构、联合和枚举,c++,anonymous-types,language-lawyer,C++,Anonymous Types,Language Lawyer,!免责声明:请注意,我指的是未标记的声明。我知道这可能是一个非正式的术语,我的意思是声明不是typedef,也不是声明匿名类型的对象。在这些情况下,一切都很清楚 问题1: 下面哪一个是一个格式良好的C++程序?(多选) 备注: MSVC9.0接受所有三种。在第一位,它给出了一个警告。在二号和三号上,我们得到0个错误和0个警告。在线comeau只接受数字3,数字1和数字2无法编译,并显示诊断消息“声明不声明任何内容”。如果第二个匿名枚举至少包含一个枚举数,那么comeau编译器将正确地接受第二个枚

!免责声明:请注意,我指的是未标记的声明。我知道这可能是一个非正式的术语,我的意思是声明不是typedef,也不是声明匿名类型的对象。在这些情况下,一切都很清楚

问题1:
下面哪一个是一个格式良好的C++程序?(多选)

备注:
MSVC9.0接受所有三种。在第一位,它给出了一个警告。在二号和三号上,我们得到0个错误和0个警告。在线comeau只接受数字3,数字1和数字2无法编译,并显示诊断消息“声明不声明任何内容”。如果第二个匿名枚举至少包含一个枚举数,那么comeau编译器将正确地接受第二个枚举数

如果comeau编译器是正确的,并且这是标准行为,那么我会发现其中存在一些不一致之处。我能理解为什么第一名应该被拒绝。我也会理解为什么第二个应该被拒绝(没有声明什么),但在这种情况下第三个也应该被拒绝。如果第三条不应该被拒绝,那么我看到的第一条与第三条的唯一区别是,一个不合法联盟成员的范围是外部范围。但枚举也是如此,所以,我的主张是,第三个数字应该被接受,第二个数字也应该被接受

问题2:
如果科莫是正确的,我在上述判断中遗漏了哪些考虑因素


p.S.我已经给comeau支持部门写了一封电子邮件。我会在收到他们的答复后尽快发布。

这些都是不合法的。参见[dcl.dcl]第3段。

以及
enum{}的实际示例,不少于!我是个很想当语言律师的人。
//One
int main(){
   struct{}; //or class{}; should be the same
}
//Two  
int main(){
   enum{}; 
}
//Three
int main(){
   union{}; 
}