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-1
yang sama 0
dan karena itu dapat dikonversi menjadi double*
. Trik lain, seperti 0x0
, 0L
, atau static_cast<int>(0)
, tidak bekerja baik. Bahkan mendeklarasikan const int Zero = 0
dan menelepon f(Zero)
menghasilkan kesalahan yang sama. Ini hanya berfungsi dengan baik jika Zero
tidak 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-1
sebuah literal bilangan bulat ? Ini adalah ekspresi yang mengandung dua literal bilangan bulat dengan nilai1
dan-
operator.