Upozornění kompilátoru (úroveň 4) C5054
operator 'operator-name': zastaralé mezi výčty různých typů
Poznámky
C++20 přestal používat obvyklé aritmetické převody na operandech, kde jeden operand je typu výčtu a druhý je jiného typu výčtu. 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ýčtu upozornění úrovně 4, 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ším vytvoří následující kód upozornění úrovně 4, když je povolená 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
:
// 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
}
Pokud se chcete upozornění vyhnout, použijte static_cast
k převodu druhého operandu:
// 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);
}