尝试在不同的编译器上编译以下代码会给我两个不同的结果:
struct S{};
struct T{S S;};
int main(){}
如您所见,在内部T
,我有一个与之前定义的类同名的对象S
。
在 GCC 4.7.2 上,我收到以下S S;
与内部声明有关的错误T
:
错误:'ST::S' [-fpermissive] 的声明
错误:从'struct S' [-fpermissive] 更改'S' 的含义
但是,将其移出类(或移入main
)可以正常工作:
struct S{};
S S;
int main(){}
它给我的错误到底是什么意思?
在 Visual Studio 2012 中,整个程序编译并运行,没有任何错误。将它粘贴到这个 Clang 3.0 编译器中也不会给我任何错误。
哪个是对的?我真的可以这样做吗?