Ich habe Compiler, die auf sizeof nicht übereinstimmen. Für den folgenden Code werden Clang und GCC es kompilieren, aber andere Compiler, die ich verwenden muss, schlagen "illegal sizeof operand" fehl. Mein Lesen des Standards besagt, dass dies illegal ist, da sizeof
nur einen Ausdruck annehmen kann (ich glaube nicht, dass S :: a ein Ausdruck ist) oder eine Typ-ID, aber es ist ungewöhnlich, dass sowohl GCC als auch Clang falsch liegen . Ich kann es natürlich durch sizeof(S().a)
ersetzen, das mit all meinen Compilern funktioniert.Clang und GCC akzeptieren fragwürdige sizeof
struct S
{
int a[32];
int b;
int c;
int d[32];
};
int main()
{
return sizeof(S::a);
}
Sind Clang und GCC falsch, oder habe ich den Standard falsch gelesen?
eingeführt VS2015 akzeptiert es auch :) Können Sie bitte auch die "anderen Compi "und die entsprechenden gcc/clang-Versionen? – Rakete1111
[Dies wurde in C++ 11 hinzugefügt] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html) – Praetorian
Kann nicht reproduziert werden - g ++ 5.2.1, drang ++ 3.6.2.1 auf Ubuntu 15.10 –