Skip to content

Latest commit

 

History

History
34 lines (24 loc) · 1.26 KB

File metadata and controls

34 lines (24 loc) · 1.26 KB
description title ms.date f1_keywords helpviewer_keywords
Learn more about: Compiler Warning (error) C4597
Compiler Warning (error) C4597
05/03/2021
C4597
C4597

Compiler Warning (error) C4597

undefined behavior: offsetof applied to a member of a virtual base

Using offsetof(T, m) where m refers to a static data member or a member function results in C4597.

Remarks

This warning is new in Visual Studio 2017 version 15.3. It's reported as an error by default. For information on how to disable warnings by compiler version, see Compiler warnings by compiler version.

Example

The following code produces error C4597:

#include <cstddef>

struct A {
   int ten() { return 10; }
   static constexpr int two = 2;
};

constexpr auto off = offsetof(A, ten);  // C4597: undefined behavior: offsetof applied to member function 'A::ten'
constexpr auto off2 = offsetof(A, two); // C4597: undefined behavior: offsetof applied to static data member 'A::two'

This code is ill-formed and could potentially cause a crash at runtime. To fix the error, change the code: don't invoke offsetof on member functions or static data members. It's non-portable code that's disallowed by the C++ standard.