다음 코드를 고려하십시오.
void f(double p) {}
void f(double* p) {}
int main()
{ f(1-1); return 0; }
MSVC 2017은이를 컴파일하지 않습니다. 1-1
동일 0
하고 따라서로 변환 될 수 있는 모호한 오버로드 된 호출 이 있음을 나타 double*
냅니다. 다른 트릭 같은 0x0
, 0L
또는 static_cast<int>(0)
, 중 하나가 작동하지 않습니다. a const int Zero = 0
를 호출하고 호출 하더라도 f(Zero)
동일한 오류가 발생합니다. Zero
이 아닌 경우에만 제대로 작동합니다 const
.
동일한 문제가 GCC 5 이하에 적용되지만 GCC 6에는 적용되지 않는 것 같습니다. 이것이 C ++ 표준, 알려진 MSVC 버그 또는 컴파일러 설정의 일부인지 궁금합니다. 커서 Google은 결과를 얻지 못했습니다.
1-1
1
-