में 5.1.1 सी के/3 ++ मानक [expr.prim.general]`* यह बाहरी सदस्य कार्य निकाय?
अन्य संदर्भों में वस्तु अभिव्यक्ति के विपरीत, * इस वर्ग के सदस्य पहुँच के प्रयोजनों के बाहर के लिए पूर्ण प्रकार का होना आवश्यक नहीं है सदस्य समारोह शरीर। घोषणा के लिए केवल 0 सदस्यों के पहले घोषित किया गया है।
और फिर इस उदाहरण:
struct A {
char g();
template<class T> auto f(T t) -> decltype(t + g())
{ return t + g(); }
};
template auto A::f(int t) -> decltype(t + g());
आप उद्धरण और उदाहरण व्याख्या कर सकते हैं? यहां वास्तव में क्या दिखाया जा रहा है?
मेरा मानना है कि यह 'एक :: g' के उपयोग को संदर्भित करता है अपने शरीर के बजाय 'एफ' के हस्ताक्षर में। यह कंपाइलर लेखकों के लिए चीजों को जटिल करता है, क्योंकि आपको 'ए 'जी' पर अधिभार रिज़ॉल्यूशन (संभावित रूप से) अधिभार रिज़ॉल्यूशन करने के लिए कहा जाता है, भले ही 'ए' पूरी तरह से परिभाषित नहीं किया गया हो। इससे पहले, एक सामान्य बात यह थी कि पहले सभी घोषणाओं (विधियों और सदस्यों के) को पार्स करें और फिर विधियों के निकायों को पार्स करने के लिए "पूरी तरह परिभाषित" 'ए' का उपयोग करें। –
@MaththieuM .: ध्यान दें कि यह फ़ंक्शन बॉडी के बाहर है। क्लास विनिर्देशक को पार्स करने के बाद भी आपको इनलाइन फ़ंक्शन निकायों की पार्सिंग को रोकना होगा। –