2013-01-07 55 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

这意味着:它是不允许的,铛++是正确的。非常感谢你! –