模板形参重新定义默认实参
C++11: template parameter redefines default argument
使用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 Version 3.3 (trunk 171722))
我的问题:
允许这种类型的重定义吗?如果没有:你能给我指出c++标准中合适的地方吗?
§14.1.12:
一个模板形参不能由同一作用域内的两个不同声明提供默认实参。
(例子:
template<class T = int> class X; template<class T = int> class X { /∗... ∗/ }; // error
- end示例]
相关文章:
- C++(和 ROS) - 包含与前向声明引用,设置默认值和类型定义
- 没有默认构造函数作为模板参数的自定义比较器
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 如何定义 Vector2f 的默认参数?[SFML]
- 用户定义的结构是否有默认C++比较器?
- 为什么为派生类定义复制构造函数需要定义基类的默认构造函数?
- 构造函数中定义的类函数的默认参数
- 注意:"Entity_c::Entity_c(const Entity_c&)"被隐式删除,因为默认定义格式不正确:
- 具有外部定义的默认特殊成员函数
- boost::p rogram_options 自定义验证和默认值
- 当为模板参数提供默认参数时,VS 2017无法正确找到以前定义的类型
- C :在现实世界中添加和重新定义默认参数
- 重新定义默认参数:参数 2
- 为什么 boost::p rogram_options 在定义默认值时会抛出有关必需参数的错误
- 如何有条件地定义默认构造函数
- 是否可以在没有预处理器宏的情况下为"virtual" get-setter 定义默认实现
- 在c++ Builder类中定义默认函数参数和参数过少错误
- 使用typedef为std::unique_ptr指定自定义默认删除器
- 如何在c++中定义默认类型转换操作符
- 模板形参重新定义默认实参