Поделиться через


Предупреждение компилятора (уровень 1) C5055

оператор "operator-name": устарел между перечислениями и типами с плавающей запятой

Замечания

C++20 не рекомендует обычные арифметические преобразования в операндах, где один операнд имеет тип перечисления, а другой — тип с плавающей запятой. Дополнительные сведения см. в P1120R0 предложения C++Standard.

В Visual Studio 2019 версии 16.2 и более поздних версиях неявное преобразование между типами перечислений и типами с плавающей запятой выдает предупреждение уровня 1 при включении параметра компилятора /std:c++latest . В Visual Studio 2019 версии 16.11 и более поздних версиях он также создает предупреждение в /std:c++20разделе .

Пример

В Visual Studio 2019 версии 16.2 и более поздних версиях двоичная операция между перечислением и типом с плавающей запятой выдает предупреждение уровня 1 при /std:c++latest включении параметра компилятора. В Visual Studio 2019 версии 16.11 и более поздних версиях также создается предупреждение в /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
}

Чтобы избежать этого предупреждения, используйте static_cast для преобразования второго операнда:

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