2016-01-16 13 views
7

निम्नलिखित कोडक्या आभासी कार्य constexpr हो सकता है?

struct X 
{ 
    constexpr virtual int f() const 
    { 
     return 0; 
    } 
}; 

में X::f() की तरह कर सकते हैं आभासी कार्यों constexpr हो सकता है?

+2

इसके बारे में एक मिनट के बारे में सोचें नहीं। यह 'constexpr' उद्देश्य को पूरी तरह से पराजित करेगा। –

+0

इस तरह के एक काल्पनिक कार्य को निरंतर अभिव्यक्ति के रूप में उपयोग किया जा सकता है अगर कॉलिंग इंस्टेंस का पूरा प्रकार 'एक्स'' के रूप में जाना जाता है। यह अनिवार्य रूप से "devirtualization नियम" निर्दिष्ट करने के लिए भाषा की आवश्यकता होगी। –

+1

@ πάνταῥεῖ डी में आप वर्चुअल फ़ंक्शंस के साथ संकलन समय फ़ंक्शन मूल्यांकन कर सकते हैं। तो यह असंभव नहीं है। –

उत्तर

24

[dcl.constexpr]/3 (7.1.5, "constexpr विनिर्देशक") के बाद संख्या:

एक constexpr समारोह निम्न आवश्यकताओं को संतुष्ट करेगा की परिभाषा:

- यह वर्चुअल

+0

यह अजीब है, 'जीसीसी संस्करण 4.9.2 20141101 (रेड हैट 4.9.2-1) (जीसीसी)' [यह काम करता है] (http://pastebin.com/gBRT31VG) – zaratustra

+5

सिर्फ इसलिए कि एक कंपाइलर कुछ स्वीकार करता है ' टी मतलब यह अनुमति है। –

+1

क्लैंग ++ लिंक में कोड स्वीकार नहीं करता है। –

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