मैं निम्नलिखित कोड है:टेम्पलेट संकलन त्रुटि - मानक या नहीं?
template<int k>
void foo()
{
}
int main(int argc, char* argv[])
{
int k = 1000;
foo<k>();
return 0;
}
जो संकलन नहीं है, लेकिन अगर मैं const
रूप k
घोषित, यह करता है:
template<int k>
void foo()
{
}
int main(int argc, char* argv[])
{
const int k = 1000;
foo<k>();
return 0;
}
अब, मैं पीछे तर्क क्यों पहले में अगर यह संकलित नहीं होता है और दूसरे में यह करता है, लेकिन क्या यह मानक द्वारा निर्दिष्ट है?
त्रुटि मैं हो रही है:
Error 1 error C2971: 'foo' : template parameter 'k' : 'k' : a local variable cannot be used as a non-type argument
जो वास्तव में स्पष्ट नहीं है, के बाद से k
एक स्थानीय चर मामला यह const
है में भी है ... है ना?
error: ‘k’ cannot appear in a constant-expression
आपने यह निर्दिष्ट नहीं किया कि क्यों 'के' एक में काम करता है लेकिन दूसरा नहीं, जो प्रश्न का मांस था। – GManNickG
मैंने जो अनुभाग बोल्ड किया है उसे देखें। मानक कहता है कि अभिव्यक्ति निरंतर होना चाहिए। –
लेकिन मैं खुद को दोहराता हूं: आप यह नहीं पता कि क्यों 'के' प्रयोग योग्य है या नहीं। – GManNickG