18
我有编译器不同意sizeof。对于下面的代码,Clang和GCC将编译它,但是我必须使用的其他编译器失败,声称“非法sizeof操作数”。我对标准的阅读说这是非法的,因为sizeof
只能表达一个表达式(我不认为S :: a是表达式)或类型id,但是对于GCC和Clang都是错误的。我明显可以用sizeof(S().a)
代替它,它可以与我的所有编译器一起工作。Clang和GCC接受可疑的sizeof
struct S
{
int a[32];
int b;
int c;
int d[32];
};
int main()
{
return sizeof(S::a);
}
Clang和GCC是错的,还是我误读了标准?
介绍的VS2015也接受它:)你也可以请指定“其他compi lers“和相应的gcc/clang版本? – Rakete1111
[This is added in C++ 11](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html) – Praetorian
无法重现-g ++ 5.2.1,在Ubuntu 15.10上使用clang ++ 3.6.2.1 –