निम्नलिखित कोड पर विचार करें।
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)
, काम भी नहीं करते हैं। यहां तक कि const int Zero = 0
कॉलिंग और कॉलिंग की घोषणा भी एक f(Zero)
ही त्रुटि पैदा करती है। यह केवल ठीक से काम करता है अगर Zero
नहीं है const
।
ऐसा लगता है कि यही मुद्दा GCC 5 और उससे नीचे के लिए लागू होता है, लेकिन GCC 6 पर नहीं। मैं उत्सुक हूं अगर यह C ++ मानक, ज्ञात MSVC बग, या संकलक में एक सेटिंग का हिस्सा है। एक सरसरी गूगल ने परिणाम नहीं दिए।
1-1
एक पूर्णांक शाब्दिक ? यह एक अभिव्यक्ति है जिसमें मूल्य1
और एक-
ऑपरेटर के साथ दो पूर्णांक शाब्दिक हैं ।