【问题标题】:C++11: template parameter redefines default argumentC++11:模板参数重新定义默认参数
【发布时间】:2012-12-21 06:28:51
【问题描述】:

使用 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++ 标准中的适当点?

【问题讨论】:

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


    【解决方案1】:

    §14.1.12:

    一个模板参数不应被同一范围内的两个不同声明赋予默认参数。

    [示例:

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

    —结束示例]

    【讨论】:

    • 意思是:不允许,clang++是正确的。非常感谢!
    猜你喜欢
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多