Подтвердить что ты не робот

Моя ошибка или ошибка в компиляторе Intel? sizeof нестатической ошибки элемента

Я считаю, что этот код:

#include <stdio.h>

struct foo {
    char array[1024];
};

int main() { 
    fprintf(stderr, "sizeof(foo::array): %zd\n", sizeof(foo::array));    
}

Действителен С++. g++ компилирует его просто отлично с -ansi -pedantic. Однако компиляция с Intel icc 12.1.3 я получаю:

error #288: a nonstatic member reference must be relative to a specific object

Является ли это своей ошибкой или я не делаю неправильную вещь: спецификация С++?

4b9b3361

Ответ 1

Это ошибка компилятора или, возможно, компилятор был выпущен до того, как эта функция была принята в стандарте.

В соответствии со стандартом С++ (5.1 Первичные выражения)

13 Идентификатор, который обозначает нестатический элемент данных или нестатическая функция члена класса может использоваться только:

- если это id-выражение обозначает нестатический элемент данных, и это появляется в неопубликованном операнде.

[ Example:
struct S {
int m;
};
int i = sizeof(S::m); // OK
int j = sizeof(S::m + 42); // OK
—end example ]