Avertissement du compilateur (niveau 1) C5055

opérateur 'operator-name' : déconseillé entre les énumérations et les types à virgule flottante

Notes

C++20 a déprécié les conversions arithmétiques habituelles sur les opérandes, où un opérande est de type énumération et l’autre est de type à virgule flottante. Pour plus d’informations, consultez la proposition C++ Standard P1120R0.

Dans Visual Studio 2019 version 16.2 et ultérieure, une conversion implicite entre les types d’énumération et les types à virgule flottante génère un avertissement de niveau 1 lorsque l’option du /std:c++latest compilateur est activée. Dans Visual Studio 2019 version 16.11 et ultérieure, il génère également un avertissement sous /std:c++20.

Exemple

Dans Visual Studio 2019 version 16.2 et ultérieure, une opération binaire entre une énumération et un type à virgule flottante génère un avertissement de niveau 1 lorsque l’option du /std:c++latest compilateur est activée. Dans Visual Studio 2019 version 16.11 et ultérieure, il génère également un avertissement sous /std:c++20:

// C5055.cpp
// Compile using: cl /EHsc /W4 /std:c++latest C5055.cpp
enum E1 { a };
int main() {
  double i = a * 1.1; // Warning C5055: operator '*': deprecated between enumerations and floating-point types
}

Pour éviter l’avertissement, utilisez static_cast pour convertir le deuxième opérande :

// C5055_fixed.cpp
// Compile using: cl /EHsc /W4 /std:c++latest C5055_fixed.cpp
enum E1 { a };
int main() {
   double i = static_cast<int>(a) * 1.1;
}