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

C++ C++;11:模板参数重新定义默认参数,c++,templates,c++11,default-value,C++,Templates,C++11,Default Value,使用gcc编译以下源代码时,没有错误/警告: template< typename T = int > T func( ); template< typename T = int > T func( ); (版本信息:gcc 4.7.2,clang版本3.3(中继171722)) 我的问题: 是否允许这种类型的重新定义?如果不是:请您指出我在C++标准中的适当点?< /P> < P>〈1.1.12:< /P> 模板参数不得由同一范围内的两个不同声明提供默认参数 [示例:

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

template< typename T = int > T func( );
template< typename T = int > T func( );
(版本信息:gcc 4.7.2,clang版本3.3(中继171722))

我的问题:

是否允许这种类型的重新定义?如果不是:请您指出我在C++标准中的适当点?< /P> < P>〈1.1.12:< /P> 模板参数不得由同一范围内的两个不同声明提供默认参数

[示例:

template<class T = int> class X;
template<class T = int> class X { /∗... ∗/ }; // error
模板类X;
模板类X{/∗... ∗/ }; // 错误
-[结束示例]

§14.1.12:

模板参数不得由同一范围内的两个不同声明提供默认参数

[示例:

template<class T = int> class X;
template<class T = int> class X { /∗... ∗/ }; // error
模板类X;
模板类X{/∗... ∗/ }; // 错误
-[结束示例]


这意味着:这是不允许的,而clang++是正确的。非常感谢!这意味着:这是不允许的,而clang++是正确的。非常感谢!这意味着:这是不允许的,而clang++是正确的。非常感谢!
template<class T = int> class X;
template<class T = int> class X { /∗... ∗/ }; // error