匿名空的未标记的类,结构,联合和枚举

时间:2010-11-05 14:19:24

标签: c++ anonymous-types language-lawyer

!免责声明!:请注意我正在谈论无标记的声明。我知道这是一个非正式的术语,我的意思是声明不是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警告。在线漫画仅接受第三,第一和第二,无法编译诊断消息“声明不声明任何内容”。如果在第二个中,匿名枚举包含至少一个枚举器,则getau编译器正确地接受第二个枚举。

如果comeau编译器是正确的,这是标准行为,那么我看到它有些不一致。我能理解为什么第一名应该被拒绝。我也理解为什么第二号应该被拒绝(没有声明),但在这种情况下,第三号也应该被拒绝。如果第三个不应该被拒绝,那么我在第一个看到的唯一区别是,一个无趣的联盟成员的范围是外部范围。但是枚举的情况也是如此,因此,我的主张是,如果第三个被接受,那么应该接受第二个。

问题2:
如果考虑是正确的,我在上述判断中缺少哪些考虑因素?

P.S。我已经写了一封给goau支持的电子邮件。我会在收到答案后立即发布答案。

1 个答案:

答案 0 :(得分:3)

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