Aviso do compilador (erro) C4597
comportamento indefinido:
offsetof
aplicado a um membro de uma base virtual
Usar offsetof(T, m)
, em que m
se refere a um membro de dados estático, ou uma função de membro, resultará em um erro C4597.
Comentários
Este aviso é novo no Visual Studio 2017 versão 15.3. Ele é relatado como um erro por padrão. Para obter informações sobre como desabilitar avisos por versão do compilador, consulte Avisos do compilador por versão do compilador.
Exemplo
O seguinte código produz o erro 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'
Esse código está malformado e pode causar falhas em runtime. Para corrigir o erro, altere o código: não invoque offsetof
em funções membro ou membros de dados estáticos. Esse é o código não portátil que não é permitido pelo padrão C++.