Pertimbangkan kode berikut.
void f(double p) {}
void f(double* p) {}
int main()
{ f(1-1); return 0; }
MSVC 2017 tidak mengkompilasi itu. Itu angka ada panggilan ambigu yang berlebihan, seperti 1-1yang sama 0dan karena itu dapat dikonversi menjadi double*. Trik lain, seperti 0x0, 0L, atau static_cast<int>(0), tidak bekerja baik. Bahkan mendeklarasikan const int Zero = 0dan menelepon f(Zero)menghasilkan kesalahan yang sama. Ini hanya berfungsi dengan baik jika Zerotidak const.
Sepertinya masalah yang sama berlaku untuk GCC 5 dan di bawah, tetapi bukan GCC 6. Saya ingin tahu apakah ini adalah bagian dari standar C ++, bug MSVC yang diketahui, atau pengaturan dalam kompiler. Google sepintas tidak membuahkan hasil.
1-1sebuah literal bilangan bulat ? Ini adalah ekspresi yang mengandung dua literal bilangan bulat dengan nilai1dan-operator.