Mam kompilatory, które nie zgadzają się na sizeof. Dla następującego kodu, Clang i GCC skompilują go, ale inne kompilatory, których muszę użyć, nie podają "nielegalnego rozmiaru argumentu". Moje odczytanie standardu mówi, że jest to nielegalne, ponieważ sizeof
może przyjmować tylko wyrażenie (nie sądzę, że S :: a jest wyrażeniem) lub identyfikator typu, ale jest niezwykłe, aby GCC i Clang były błędne . Mogę oczywiście zastąpić go sizeof(S().a)
, który działa ze wszystkimi moimi kompilatorami.Clang i GCC akceptują wątpliwe sizeof
struct S
{
int a[32];
int b;
int c;
int d[32];
};
int main()
{
return sizeof(S::a);
}
Czy Clang i GCC są błędne, czy też błędnie odczytuję standard?
VS2015 również to akceptuje :) Czy możesz również podać "inne kompi lers "i odpowiadające im wersje gcc/clang? – Rakete1111
[Zostało to dodane w C++ 11] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html) – Praetorian
Nie można odtworzyć - g ++ 5.2.1, clang ++ 3.6.2.1 na Ubuntu 15.10 –