g++でoffsetofを使うと警告
出典
NAKAMURA Minoru の日記 -- g++ で offsetof が警告に
メンバ変数のオフセットを取得するマクロを使うとinvalid access to non-static data member とかいう警告がでます。
コンストラクタのあるクラスや構造体ででるっぽいです。
stddef.hのoffsetofマクロだけじゃなくオフセット求めるコードを書けば警告がでます。
-Wno-invalid-offsetof (C++ only)
POD でないタイプに offsetof マクロを適用して警告を抑制します。1998
ISO C++ 標準によると、offsetof を POD でないタイプに適用することは
未定義です。しかしながら、既存の C++ 実装では、ある種類の POD でな
いタイプに適用されるとき、通常 offsetof は重要な結果を与えます。(コ
ンストラクタを持っているという理由だけで POD タイプとなることに失敗
する単純な struct などです。) このフラグは、移植性がないコードを書
いていることを承知していて、それに関する警告を無視するために故意に
選んだ、ユーザのためのものです。offsetof での制限は、C++ 標準の将来のバージョンで緩和されるかもしれ
ません。
- Wno-invalid-offsetofオプションを使うと抑制できます。