Share via


Upozornění kompilátoru (úroveň 1) C5055

operator 'operator-name': deprecated between enumerations and floating-point types

Poznámky

C++20 přestal používat obvyklé aritmetické převody na operandech, kde jeden operand je typu výčtu a druhý je typu s plovoucí desetinou čárkou. Další informace naleznete v tématu Standardní návrh jazyka C++ P1120R0.

V sadě Visual Studio 2019 verze 16.2 a novějším vytvoří implicitní převod mezi typy výčtů a typy s plovoucí desetinou čárkou upozornění na úroveň 1, pokud je povolena možnost kompilátoru /std:c++latest . V sadě Visual Studio 2019 verze 16.11 a novější se také zobrazí upozornění v části /std:c++20.

Příklad

V sadě Visual Studio 2019 verze 16.2 a novější vytvoří binární operace mezi výčtem a typem s plovoucí desetinou čárkou upozornění na úroveň 1, pokud je povolena možnost kompilátoru /std:c++latest . V sadě Visual Studio 2019 verze 16.11 a novější se také zobrazí upozornění v části /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
}

Pokud se chcete upozornění vyhnout, použijte static_cast k převodu druhého operandu:

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