Compilerwarnung (Stufe 4) C5054
Operator 'operator-name': veraltet zwischen Enumerationen unterschiedlicher Typen
Hinweise
C++20 hat die üblichen arithmetischen Konvertierungen für Operanden veraltet, wobei ein Operand vom Enumerationstyp und der andere von einem anderen Enumerationstyp ist. Weitere Informationen finden Sie unter C++-Standardvorschlag P1120R0.
In Visual Studio 2019, Version 16.2 und höher, erzeugt eine implizite Konvertierung zwischen Enumerationstypen eine Warnung der Ebene 4, wenn die /std:c++latest
Compileroption aktiviert ist. In Visual Studio 2019, Version 16.11 und höher, erzeugt sie auch eine Warnung unter /std:c++20
.
Beispiel
In Visual Studio 2019, Version 16.2 und höher, erzeugt der folgende Code eine Warnung der Ebene 4, wenn die /std:c++latest
Compileroption aktiviert ist. In Visual Studio 2019, Version 16.11 und höher, wird auch eine Warnung unter /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
}
Konvertieren Sie den zweiten Operanden mit static_cast
, um zu vermeiden, dass die Warnung ausgelöst wird:
// 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);
}