使用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 ++标准中的适当点?
答案 0 :(得分:11)
§14.1.12:
模板参数不应由同一范围内的两个不同声明给出默认参数。
[实施例:
template<class T = int> class X; template<class T = int> class X { /∗... ∗/ }; // error
- 结束示例]