Compartir a través de


Advertencia del compilador (nivel 1) C5055

operador "operator-name": en desuso entre enumeraciones y tipos de número de punto flotante

Comentarios

C++20 dejó en desuso las conversiones aritméticas usuales en los operandos, en las que un operando es de tipo de enumeración y el otro tiene un tipo de número de punto flotante. Para más información, consulte la propuesta del estándar de C++ P1120R0.

En la versión 16.2 y posteriores de Visual Studio 2019, una conversión implícita entre los tipos de enumeración y los tipos de número de punto flotante genera una advertencia de nivel 1 cuando la opción del compilador /std:c++latest está habilitada. En la versión 16.11 y posteriores de Visual Studio 2019, también genera una advertencia en /std:c++20.

Ejemplo

En la versión 16.2 y posteriores de Visual Studio 2019, una operación binaria entre una enumeración y un tipo de número de punto flotante genera una advertencia de nivel 1 cuando la opción del compilador /std:c++latest está habilitada. En la versión 16.11 y posteriores de Visual Studio 2019, también genera una advertencia en /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
}

Para evitar la advertencia, use static_cast para convertir el segundo operando:

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