Предупреждение компилятора (уровень 1) C5055
оператор "operator-name": устарел между перечислениями и типами с плавающей запятой
Замечания
C++20 не рекомендует обычные арифметические преобразования в операндах, где один операнд имеет тип перечисления, а другой — тип с плавающей запятой. Дополнительные сведения см. в P1120R0 предложения C++Standard.
В Visual Studio 2019 версии 16.2 и более поздних версиях неявное преобразование между типами перечислений и типами с плавающей запятой выдает предупреждение уровня 1 при включении параметра компилятора /std:c++latest
. В Visual Studio 2019 версии 16.11 и более поздних версиях он также создает предупреждение в /std:c++20
разделе .
Пример
В Visual Studio 2019 версии 16.2 и более поздних версиях двоичная операция между перечислением и типом с плавающей запятой выдает предупреждение уровня 1 при /std:c++latest
включении параметра компилятора. В Visual Studio 2019 версии 16.11 и более поздних версиях также создается предупреждение в /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
}
Чтобы избежать этого предупреждения, используйте static_cast
для преобразования второго операнда:
// 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;
}