Advertencia del compilador (nivel 4) C5054
operador "operator-name": en desuso entre enumeraciones de tipos diferentes
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 enumeración diferente. 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 genera una advertencia de nivel 4 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, el código siguiente genera una advertencia de nivel 4 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
:
// C5054.cpp
// Compile using: cl /EHsc /W4 /std:c++latest C5054.cpp
enum E1 { a };
enum E2 { b };
int main() {
int i = a | b; // warning C5054: operator '|': deprecated between enumerations of different types
}
Para evitar la advertencia, use static_cast
para convertir el segundo operando:
// C5054_fixed.cpp
// Compile using: cl /EHsc /W4 /std:c++latest C5054_fixed.cpp
enum E1 { a };
enum E2 { b };
int main() {
int i = a | static_cast<int>(b);
}