컴파일러 경고(수준 1) C5055
연산자 'operator-name': 열거형과 부동 소수점 형식 간에 사용되지 않음
설명
C++20은 피연산자에서 일반적인 산술 변환을 더 이상 사용하지 않습니다. 여기서 한 피연산자는 열거형 형식이고 다른 피연산자는 부동 소수점 형식입니다. 자세한 내용은 C++ 표준 제안 P1120R0 참조하세요.
Visual Studio 2019 버전 16.2 이상에서 열거형 형식과 부동 소수점 형식 간의 암시적 변환은 컴파일러 옵션을 사용할 때 /std:c++latest
수준 1 경고를 생성합니다. Visual Studio 2019 버전 16.11 이상에서는 아래에 /std:c++20
경고도 생성됩니다.
예시
Visual Studio 2019 버전 16.2 이상에서 열거형과 부동 소수점 형식 간의 이진 작업은 컴파일러 옵션을 사용할 때 /std:c++latest
수준 1 경고를 생성합니다. Visual Studio 2019 버전 16.11 이상에서는 다음에서 /std:c++20
경고를 생성합니다.
// C5055.cpp
// Compile using: cl /EHsc /W4 /std:c++latest C5055.cpp
enum E1 { a };
int main() {
double i = a * 1.1; // Warning C5055: operator '*': deprecated between enumerations and floating-point types
}
이 경고를 방지하려면 static_cast
를 사용하여 두 번째 피연산자를 변환합니다.
// C5055_fixed.cpp
// Compile using: cl /EHsc /W4 /std:c++latest C5055_fixed.cpp
enum E1 { a };
int main() {
double i = static_cast<int>(a) * 1.1;
}