我的错误,还是intel编译器的错误? sizeof非静态成员错误

时间:2015-11-24 14:55:04

标签: c++ c++11 sizeof

我相信这段代码:

#include <stdio.h>

struct foo {
    char array[1024];
};

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

是有效的C ++。 g ++用-ansi -pedantic编译得很好。但是,使用英特尔的icc 12.1.3编译我得到:

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

是我的错误还是icc做了错误的事情:C ++规范?

1 个答案:

答案 0 :(得分:1)

这是一个编译器错误,或者可能是在标准中采用此功能之前发布的。

根据C ++标准(5.1主要表达式)

  

13一个id表达式,表示非静态数据成员或   只能使用类的非静态成员函数:

     

- 如果该id-expression表示非静态数据成员及其   出现在未评估的操作数中。

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