And*_*ath 8 c++ templates default-value c++11
使用gcc编译以下源代码时,没有错误/警告:
template< typename T = int > T func( );
template< typename T = int > T func( );
Run Code Online (Sandbox Code Playgroud)
当我使用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.
Run Code Online (Sandbox Code Playgroud)
要编译的命令
[clang++|g++] -Wall -Werror -std=c++11 redeftempparam.cc
Run Code Online (Sandbox Code Playgroud)
(版本信息:gcc 4.7.2,clang version 3.3(trunk 171722))
我的问题:
是否允许这种重新定义?如果没有:你能指点我C++标准中的适当点吗?
Bar*_*icz 12
§14.1.12:
模板参数不应由同一范围内的两个不同声明给出默认参数.
[例:
Run Code Online (Sandbox Code Playgroud)template<class T = int> class X; template<class T = int> class X { /?... ?/ }; // error
- 结束例子]