2012-07-05 27 views
6

वर्चुअल सदस्य फ़ंक्शन पॉइंटर्स के साथ decltype का उपयोग करना कानूनी है?आभासी सदस्य फ़ंक्शन पॉइंटर्स के साथ decltype का उपयोग

निम्नलिखित VS2012 के साथ एक आंतरिक त्रुटि (सी 1001) उत्पन्न करता है।

struct C 
{ 
    virtual void Foo() {} 

    typedef decltype(&C::Foo) type; //pointer 
} 

लेकिन यह ठीक संकलित:

struct C 
{ 
    virtual void Foo() {} 

    typedef decltype(C::Foo) type; //not pointer 
} 

यह एक बग है?

+9

यह "अवैध" था, यह एक त्रुटि संदेश उत्पन्न करेगा, आंतरिक त्रुटि नहीं। आपको स्पष्ट रूप से कंपाइलर में एक बग मिला। – AnT

+3

@AndreyT: +1, मैं इसे जोड़ दूंगा: * भले ही यह अवैध था, यह आंतरिक त्रुटि * का कारण नहीं बनना चाहिए। –

उत्तर

4

एमएसवीसी में सदस्य फ़ंक्शन पॉइंटर्स के लिए decltype के साथ कई ज्ञात समस्याएं हैं; यह भी देखें Using decltype with member function pointers

यह कानूनी वाक्यविन्यास है; g ++ इसके साथ पूरी तरह से खुश है (http://ideone.com/sTZi6)। सदस्य कार्यों पर decltype के संचालन को प्रतिबंधित करने के लिए मानक में कुछ भी नहीं है।

+0

thx। बीटीडब्लू लिंक भी मेरे प्रश्नों में से एक है। ;-) – Nubcase

संबंधित मुद्दे