我相信这段代码:
#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 ++规范?
答案 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 ]