Aşağıdaki kodu düşünün.
void f(double p) {}
void f(double* p) {}
int main()
{ f(1-1); return 0; }
MSVC 2017 bunu derlemiyor. Aynı şekilde 1-1
olduğu gibi belirsiz bir aşırı yüklenmiş çağrı olduğunu 0
ve bu nedenle dönüştürülebileceğini gösterir double*
. Diğer hileler gibi 0x0
, 0L
ya static_cast<int>(0)
, ya çalışmaz. Bir const int Zero = 0
ve bildirimi bile f(Zero)
aynı hatayı üretir. Sadece düzgün çalıştığını Zero
değildir const
.
Aynı sorun GCC 5 ve altı için de geçerli, ancak GCC 6 için geçerli değil. Bunun C ++ standardının bir parçası, bilinen bir MSVC hatası veya derleyicideki bir ayar olup olmadığını merak ediyorum. Bir cursory Google sonuç vermedi.
1-1
bir tamsayı değişmezi ? Değerli iki tamsayı değişmez değeri1
ve bir-
işleç içeren bir ifadedir .