พิจารณารหัสต่อไปนี้
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)ทำให้เกิดข้อผิดพลาดเดียวกัน มันทำงานได้เพียงอย่างถูกต้องหากไม่ได้เป็นZeroconst
ดูเหมือนว่าปัญหาเดียวกันจะใช้กับ GCC 5 และด้านล่าง แต่ไม่ใช่ GCC 6 ฉันอยากรู้ว่านี่เป็นส่วนหนึ่งของมาตรฐาน C ++, ข้อผิดพลาด MSVC ที่รู้จักหรือการตั้งค่าในคอมไพเลอร์ Google คร่าวๆไม่ได้ผลลัพธ์
1-11-