Предупреждение компилятора (ошибка) C4597
неопределенное поведение:
offsetof
применяется к члену виртуальной базы
Использование offsetof(T, m)
, где m
относится к статическому элементу данных или функции-члену, приводит к C4597.
Замечания
Это предупреждение новое в Visual Studio 2017 версии 15.3. По умолчанию оно сообщается как ошибка. Сведения об отключении предупреждений по версии компилятора см. в предупреждениях компилятора по версии компилятора.
Пример
Следующий код возвращает ошибку 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'
Этот код является некорректным и может привести к сбою во время выполнения. Чтобы устранить ошибку, измените код: не вызывайте offsetof
функции-члены или статические элементы данных. Это код не является переносимым и запрещен стандартом C++.