Bagikan melalui


Peringatan kompiler (level 4) C5054

operator 'operator-name': tidak digunakan lagi di antara enumerasi dari berbagai jenis

Keterangan

C++20 telah menghentikan konversi aritmatika biasa pada operand, di mana satu operand berjenis enumerasi dan yang lainnya adalah jenis enumerasi yang berbeda. Untuk informasi selengkapnya, lihat P1120R0 proposal Standar C++.

Di Visual Studio 2019 versi 16.2 dan yang lebih baru, konversi implisit antara jenis enumerasi menghasilkan peringatan tingkat 4 saat /std:c++latest opsi pengkompilasi diaktifkan. Di Visual Studio 2019 versi 16.11 dan yang lebih baru, visual Studio 2019 juga menghasilkan peringatan di bawah /std:c++20.

Contoh

Di Visual Studio 2019 versi 16.2 dan yang lebih baru, kode berikut menghasilkan peringatan tingkat 4 saat /std:c++latest opsi pengkompilasi diaktifkan. Di Visual Studio 2019 versi 16.11 dan yang lebih baru, visual Studio juga menghasilkan peringatan di bawah /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
}

Untuk menghindari peringatan, gunakan static_cast untuk mengonversi operand kedua:

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