Share via


Derleyici uyarısı (düzey 4) C5054

işleci 'operator-name': farklı türlerdeki numaralandırmalar arasında kullanım dışı bırakıldı

Açıklamalar

C++20 işlenenlerde normal aritmetik dönüştürmeleri kullanım dışı bırakmıştır. Burada işlenenlerden biri numaralandırma türünde, diğeri farklı bir sabit listesi türündedir. Daha fazla bilgi için bkz. C++ Standart teklif P1120R0.

Visual Studio 2019 sürüm 16.2 ve sonraki sürümlerinde, numaralandırma türleri arasında örtük bir dönüştürme, derleyici seçeneği etkinleştirildiğinde /std:c++latest düzey 4 uyarısı oluşturur. Visual Studio 2019 sürüm 16.11 ve sonraki sürümlerinde altında da bir uyarı /std:c++20oluşturur.

Örnek

Visual Studio 2019 sürüm 16.2 ve sonraki sürümlerinde, derleyici seçeneği etkinleştirildiğinde /std:c++latest aşağıdaki kod düzey 4 uyarısı oluşturur. Visual Studio 2019 sürüm 16.11 ve sonraki sürümlerinde, altında /std:c++20da bir uyarı oluşturur:

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

Uyarıyı önlemek için ikinci işleneni dönüştürmek için kullanın static_cast :

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