コンパイラ警告 (レベル 4) C4841

非標準の拡張機能が使用されています: 複合メンバー指定子が offsetof で使用されています

解説

offsetof(T, m) を使用する場合 (m は複合メンバー指定子)、/Wall オプションを使用してコンパイルすると、コンパイラは警告を生成します。

この警告は Visual Studio 2017 バージョン 15.3 で新たに追加されたものであり、既定では無効になっています。 既定でオフになっているすべての警告を有効にするには /Wall を、C4841 をレベル 1 の警告として有効にするには /w14841 を使用します。 詳細については、「既定で無効になっているコンパイラ警告」を参照してください。 コンパイラのバージョン別の警告を無効にする方法は、「コンパイラのバージョン別のコンパイラの警告」を参照してください。

次のコードは形式が不適切であり、実行時にクラッシュが発生する可能性があります。

struct A {
   int arr[10];
};

// warning C4841: non-standard extension used: compound member designator in offsetof
constexpr auto off = offsetof(A, arr[2]);

この問題を解決するには、offsetof を複合メンバー指定子と共に使用しないようにコードを変更します。