जब मैं MSVC++ साथ निम्नलिखित कोड संकलन, मैं कोई त्रुटि मिलती है:खाका समारोह प्रकार कटौती और ऑपरेटर << C++
struct A
{
template<typename T>
void operator<<(T&& x)
{
}
};
void f()
{
}
int main()
{
A().operator<<(f); // ok
A() << f; // error
return 0;
}
जी ++ और बजना दोनों इस कोड को ठीक संकलन। AFAIK, 'ठीक' और 'त्रुटि' लाइनों बिल्कुल वही बात करते हैं, और टी टाइप शून्य (&)() को निष्कर्ष निकाला है। या यह शून्य() और फ़ंक्शन के रावल संदर्भों की अनुमति है? यदि हां, तो उनका क्या अर्थ है? क्या इस तरह के संदर्भ से कार्यों को पार करना ठीक है? क्या यह एमएसवीसी ++ बग है कि यह 'त्रुटि' संकलन को संकलित करने में विफल रहता है? बीटीडब्ल्यू, त्रुटि आउटपुट:
no operator found which takes a right-hand operand of type 'overloaded-function' (or there is no acceptable conversion)
could be 'void A::operator <<<void(void)>(T (__cdecl &&))'
with[ T=void (void) ]
आप अपनी C++ संकलक के संस्करण प्रदान कर सकते हैं? – xis
एनएसवी सीटीपी अपडेट के साथ एमएसवीसी ++ 2012, जीसीसी 4.5.3 और 4.7.2 परीक्षण, क्लैंग 3.0 और 3.1 परीक्षण। – dsi
मेरे पास वीसी 11 नहीं है, इसलिए मेरे लिए जांच करना मुश्किल है, लेकिन यह यूआरफ गिरने के साथ एक बग की तरह गंध करता है। कंपाइलर गलती से इसे आरआरएफ के रूप में व्याख्या करने के लिए व्याख्या करता है और इनपुट में एक लाभा स्वीकार नहीं करता है। यह जांचना दिलचस्प होगा कि 'typedef शून्य (* परीक्षण)(); परीक्षण जी() {वापसी एफ; } ... ए() << जी(); 'काम करेगा –