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