컴파일러 경고(수준 4) C5054
연산자 'operator-name': 다른 형식의 열거형 간에 사용되지 않음
설명
C++20은 피연산자에서 일반적인 산술 변환을 더 이상 사용하지 않습니다. 여기서 한 피연산자는 열거형 형식이고 다른 피연산자는 다른 열거형 형식입니다. 자세한 내용은 C++ 표준 제안 P1120R0 참조하세요.
Visual Studio 2019 버전 16.2 이상에서 열거형 형식 간의 암시적 변환은 컴파일러 옵션을 사용할 때 /std:c++latest
수준 4 경고를 생성합니다. Visual Studio 2019 버전 16.11 이상에서는 아래에 /std:c++20
경고도 생성됩니다.
예시
Visual Studio 2019 버전 16.2 이상에서 다음 코드는 컴파일러 옵션을 사용할 때 /std:c++latest
수준 4 경고를 생성합니다. Visual Studio 2019 버전 16.11 이상에서는 다음에서 /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
}
이 경고를 방지하려면 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);
}