概括
我正在尝试使用 AIX 11.1 编译器在新的 AIX 7 机器上编译旧的 C++ 应用程序。此应用程序在非 POD 类上使用 offsetof。
我将 langlvl 选项设置为 strict98 并设置“offsetnonpod”选项,它告诉编译器允许在非 POD 类上使用 offsetof。
如果我删除 offsetnonpod 设置并为 langlvl 使用扩展,我会得到同样的错误。看来我在指定 offsetnonpod 选项时一定做错了,或者编译器实际上并不支持这样的功能。
示例代码
#include <iostream>
struct Foo
{
private:
int x;
};
int main()
{
std::cout << offsetof(Foo, x);
return 0;
}
我用这个命令构建:
xlc++_r -qlanglvl=offsetnonpod -qlanglvl=strict98 test.cpp
我明白了:
"test.cpp", line 11.32: 1540-0287 (S) "offsetof" must not be applied to "struct Foo". It is not a POD (plain old data) type.