Avviso del compilatore (livello 1) C5055
operatore 'operator-name': deprecato tra enumerazioni e tipi a virgola mobile
Osservazioni:
C++20 ha deprecato le normali conversioni aritmetiche sugli operandi, dove un operando è di tipo enumerazione e l'altro è di tipo a virgola mobile. Per altre informazioni, vedere P1120R0 proposta standard C++.
In Visual Studio 2019 versione 16.2 e successive, una conversione implicita tra tipi di enumerazione e tipi a virgola mobile genera un avviso di livello 1 quando l'opzione del /std:c++latest
compilatore è abilitata. In Visual Studio 2019 versione 16.11 e successive genera anche un avviso in /std:c++20
.
Esempio
In Visual Studio 2019 versione 16.2 e successive, un'operazione binaria tra un'enumerazione e un tipo a virgola mobile genera un avviso di livello 1 quando l'opzione del /std:c++latest
compilatore è abilitata. In Visual Studio 2019 versione 16.11 e successive genera anche un avviso in /std:c++20
:
// C5055.cpp
// Compile using: cl /EHsc /W4 /std:c++latest C5055.cpp
enum E1 { a };
int main() {
double i = a * 1.1; // Warning C5055: operator '*': deprecated between enumerations and floating-point types
}
Per evitare l'avviso, usare static_cast
per convertire il secondo operando:
// C5055_fixed.cpp
// Compile using: cl /EHsc /W4 /std:c++latest C5055_fixed.cpp
enum E1 { a };
int main() {
double i = static_cast<int>(a) * 1.1;
}