Partager via


Avertissement du compilateur (erreur) C4597

comportement non défini : offsetof appliqué à un membre d’une base virtuelle

L’utilisation de l’emplacement offsetof(T, m) m où fait référence à un membre de données statique ou à une fonction membre entraîne l’utilisation de C4597.

Notes

Cet avertissement est nouveau dans Visual Studio 2017 version 15.3. Il est signalé comme une erreur par défaut. Pour plus d’informations sur la désactivation des avertissements par version du compilateur, consultez avertissements du compilateur par version du compilateur.

Exemple

Le code suivant génère une erreur 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'

Ce code est incorrect et peut éventuellement provoquer un incident lors de l’exécution. Pour corriger l’erreur, modifiez le code : n’appelez offsetof pas sur les fonctions membres ou les membres de données statiques. Il s’agit de code non portable qui n’est pas autorisé par la norme C++.