constexpr int get() { return 5; }
template<int N> struct Test {};
int main()
{
int a[get()]; // ok
Test< get() > obj; // error:'int get()' cannot appear in a constant-expression
}
मेरे पास compiled this code with ideone है। और सोच रहा था कि यह संकलन त्रुटि क्यों दे रहा है। constexpr
फ़ंक्शन template
तर्क के रूप में अनुमति नहीं है या यह संकलक में एक बग है?क्या यह टेम्पलेट तर्क के रूप में constexpr फ़ंक्शन का उपयोग करने के लिए मान्य है?
संपादित: int get()
इसके अलावा करने के लिए const int get()
बदल गया है, वहाँ एक और बग ideone साथ कि, अगर आप constexpr
तो still declaring an array is allowed को दूर है !! मुझे लगता है कि यह एक सी 99 सुविधा है।
आपका संपादन गलत है, आपने इसे 'कॉन्स्टेक्स कॉन्स() 'बनाया है। – GManNickG
@GMan, धन्यवाद ... – iammilind
संपादन पर, यह एक सी 99 सुविधा है, और जीसीसी में यह एक विस्तार के रूप में है, लेकिन यह उचित सी ++ नहीं है, और यह पोर्टेबल नहीं होगा। इसे मानक में शामिल करने के लिए माना जाता था और अस्वीकार कर दिया गया था क्योंकि यह उस प्रकार के आविष्कार को तोड़ देगा जो आकार (आकार का हिस्सा है) संकलन समय पर जाना जाना चाहिए। सी में इससे कोई फर्क नहीं पड़ता है, लेकिन सी ++ में आप उस सरणी को एक टेम्पलेट के लिए एक प्रकार के तर्क के रूप में उपयोग करने में सक्षम नहीं होंगे (संकलित समय पर अज्ञात प्रकार अज्ञात) - जिस तरह से जीसीसी में व्यवहार होता है, यह वही होगा अगर आप इसे करने का प्रयास करते हैं तो शिकायत करें। –