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++20
oluş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++20
da 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);
}