다음을 통해 공유


컴파일러 경고(수준 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;
}