У меня есть компиляторы, которые не согласны с sizeof. Для следующего кода Clang и GCC будут скомпилировать его, но другие компиляторы, которые я должен использовать, не могут утверждать "незаконный размер операнда". Мое чтение стандарта говорит, что это незаконно, поскольку sizeof
может принимать только выражение (я не думаю, что S:: a является выражением) или идентификатор типа, но для GCC и Clang это необычно для обоих быть неправым. Я могу, очевидно, заменить его на sizeof(S().a)
, который работает со всеми моими компиляторами.
struct S
{
int a[32];
int b;
int c;
int d[32];
};
int main()
{
return sizeof(S::a);
}
Ошибочны ли Кланг и GCC, или я неправильно читаю стандарт?