Avertissement du compilateur (niveau 4) C5054
opérateur 'operator-name' : déconseillé entre les énumérations de différents types
Notes
C++20 a déprécié les conversions arithmétiques habituelles sur les opérandes, où un opérande est de type énumération et l’autre est d’un type d’énumération différent. Pour plus d’informations, consultez la proposition C++ Standard P1120R0.
Dans Visual Studio 2019 version 16.2 et ultérieure, une conversion implicite entre les types d’énumération génère un avertissement de niveau 4 lorsque l’option du /std:c++latest
compilateur est activée. Dans Visual Studio 2019 version 16.11 et ultérieure, il génère également un avertissement sous /std:c++20
.
Exemple
Dans Visual Studio 2019 version 16.2 et ultérieure, le code suivant génère un avertissement de niveau 4 lorsque l’option du /std:c++latest
compilateur est activée. Dans Visual Studio 2019 version 16.11 et ultérieure, il génère également un avertissement sous /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
}
Pour éviter l’avertissement, utilisez static_cast
pour convertir le deuxième opérande :
// 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);
}
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour