แก้ไข

แชร์ผ่าน


Compiler warning (level 1) C5055

operator 'operator-name': deprecated between enumerations and floating-point types

Remarks

C++20 has deprecated the usual arithmetic conversions on operands, where one operand is of enumeration type and the other is of floating-point type. For more information, see C++ Standard proposal P1120R0.

In Visual Studio 2019 version 16.2 and later, an implicit conversion between enumeration types and floating-point types produces a level 1 warning when the /std:c++latest compiler option is enabled. In Visual Studio 2019 version 16.11 and later, it also produces a warning under /std:c++20.

Example

In Visual Studio 2019 version 16.2 and later, a binary operation between an enumeration and a floating-point type produces a level 1 warning when the /std:c++latest compiler option is enabled. In Visual Studio 2019 version 16.11 and later, it also produces a warning under /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
}

To avoid the warning, use static_cast to convert the second operand:

// 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;
}