概要
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.