निम्न कोड निरंतर अभिव्यक्ति के रूप में enum सदस्य m
का उपयोग करता है, यानी टेम्पलेट पैरामीटर के रूप में। कोड जीसीसी के तहत संकलित है लेकिन क्लैंग (live demo) के तहत नहीं है। क्लैंग कहते हैं "त्रुटि: गैर-प्रकार का टेम्पलेट तर्क निरंतर अभिव्यक्ति नहीं है"।निरंतर अभिव्यक्ति के रूप में एक enum का उपयोग करना। कौन सा कंपाइलर सही है?
समस्या A<tst<p>::m> a
द्वारा लाइन का आदान-प्रदान करके हल की जा सकती है। इसलिए, मेरा सवाल यह नहीं है कि इस समस्या को कैसे ठीक किया जाए, लेकिन कौन सा कंपाइलर सही है।
template<size_t n> struct A{};
template<size_t n>
struct tst
{ enum : size_t { m= n % 15 };
template<size_t p>
void
call(tst<p> const &t2) {
A<t2.m> a; // 1
}
};
[यह संदर्भ कहता है] (http://en.cppreference.com/w/cpp/language/enum) "जब एक अनिश्चित गणना कक्षा का सदस्य होता है, तो उसके गणक वर्ग वर्ग एक्सेस ऑपरेटरों का उपयोग करके एक्सेस किया जा सकता है। और '->' "। हालांकि निरंतर अभिव्यक्ति होने के बारे में कुछ भी उल्लेख नहीं है। –
@ जोआचिमपिलबोर्ग मानक '§ 7.2.2' कहता है ' एन्युमरेटर-सूची में पहचानकर्ता स्थिरांक के रूप में घोषित किए जाते हैं, और जहां भी स्थिरांक की आवश्यकता होती है वहां दिखाई दे सकते हैं। – lcs