2013-01-07 31 views
6

को पुनर्परिभाषित जब जीसीसी के साथ निम्नलिखित स्रोत कोड संकलन कोई त्रुटि/चेतावनी है:सी ++ 11: टेम्पलेट पैरामीटर डिफ़ॉल्ट तर्क

template< typename T = int > T func(); 
template< typename T = int > T func(); 

जब मैं बजना साथ ++ एक ही स्रोत कोड संकलन, मैं निम्नलिखित त्रुटि मिली : जीसीसी 4.7.2, बजना ver:

redeftempparam.cc:2:24: error: template parameter redefines default argument 
template< typename T = int > T func(); 
        ^
redeftempparam.cc:1:24: note: previous default template argument defined here 
template< typename T = int > T func(); 
        ^
1 error generated. 

कमान

[clang++|g++] -Wall -Werror -std=c++11 redeftempparam.cc 

(संस्करण जानकारी संकलित करने के लिए सायन 3.3 (ट्रंक 171722))

मेरा प्रश्न:

परिभाषा इस प्रकार की अनुमति दी है? यदि नहीं: क्या आप मुझे सी ++ मानक में उपयुक्त बिंदु को इंगित कर सकते हैं?

उत्तर

9

§14.1.12:

A template-parameter shall not be given default arguments by two different declarations in the same scope.

[Example:

template<class T = int> class X; 
template<class T = int> class X { /∗... ∗/ }; // error 

— end example ]

+3

जिसका मतलब है: यह अनुमति नहीं है और बजना ++ सही है। आपका बहुत बहुत धन्यवाद! –