में कब्जा करने के लिए सदस्य फ़ंक्शन पर संदिग्ध कॉल मुझे कैप्चर this
पर एक लैम्ब्डा के अंदर सदस्य फ़ंक्शन को कॉल करने का प्रयास करते समय एक समस्या आई है। फ़ंक्शन का एक कॉन्स और गैर-कॉन्स संस्करण है और यह एक प्रकार पर templated है।लैम्ब्डा
struct TEST
{
template <typename T>
void test() {}
template <typename T>
void test() const {}
TEST()
{
[this]()
{
test<void>();
}();
}
};
संदेश::
निम्नलिखित कोड त्रुटि दर्शाता है http://rextester.com/MLU2098
source_file.cpp(13): error C2668: 'TEST::test': ambiguous call to overloaded function
source_file.cpp(7): note: could be 'void TEST::test<void>(void) const'
source_file.cpp(4): note: or 'void TEST::test<void>(void)'
source_file.cpp(13): note: while trying to match the argument list '()'
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506 for x64
मुझे यकीन है कि अगर यह व्यवहार सही और माइक्रोसॉफ्ट संकलक के साथ सिर्फ एक मुद्दा था नहीं था, इसलिए मैं परीक्षण किया कंपाइलर एक्सप्लोरर में जीसीसी और क्लैंग के साथ कोड और दोनों ने त्रुटि के बिना कोड संकलित किया।
कौन सा कंपाइलर सही व्यवहार को प्रदर्शित कर रहा है?
[यहाँ MSVC के साथ एक रेप्रो है] (http://rextester.com/MLU2098) – AndyG