Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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);
}