2013-01-07 81 views
6

當編譯用gcc下面的源代碼有沒有錯誤/警告:C++ 11:模板參數重新定義默認參數

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

當我編譯鏗鏘++相同的源代碼,我得到了以下錯誤:

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 

(版本信息:GCC 4.7.2,鐺版本錫安3.3(主幹171722))

我的問題:

就是這種類型重新定義的允許?如果不是的話:你能否指點我在​​C++標準中的適當位置?

回答

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

這意味着:它是不允許的,鐺++是正確的。非常感謝你! –