C ++ 11:模板参数重新定义默认参数

时间:2013-01-07 13:56:43

标签: c++ templates c++11 default-value

使用gcc编译以下源代码时,没有错误/警告:

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

当我使用clang ++编译相同的源代码时,我收到以下错误:

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,clang版本3.3(主干171722))

我的问题:

是否允许这种类型的重新定义?如果没有:您能否指出我在C ++标准中的适当点?

1 个答案:

答案 0 :(得分:11)

§14.1.12:

  

模板参数不应由同一范围内的两个不同声明给出默认参数。

     

[实施例:

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

- 结束示例]