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-1olduğu gibi belirsiz bir aşırı yüklenmiş çağrı olduğunu 0ve bu nedenle dönüştürülebileceğini gösterir double*. Diğer hileler gibi 0x0, 0Lya static_cast<int>(0), ya çalışmaz. Bir const int Zero = 0ve bildirimi bile f(Zero)aynı hatayı üretir. Sadece düzgün çalıştığını Zerodeğ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-1bir tamsayı değişmezi ? Değerli iki tamsayı değişmez değeri1ve bir-işleç içeren bir ifadedir .