函数模板不能隐藏类名
function template cannot hide class name?
这适用于GCC和comau:
struct X {};
void X() {}
在Comeau:
struct X {};
template< typename T >
void X() {}
template< typename T >
struct X {};
template< typename T >
void X() {}
该规则由§3.3.7/2定义。这种差异仅仅是因为函数模板不是函数吗?我不能理解GCC的行为。
类名(9.1)或枚举名(7.2)可以通过在同一作用域中声明的变量名、数据成员名、函数名或枚举数名来隐藏。如果类或枚举名与变量、数据成员、函数或枚举数在同一作用域中以相同的名称声明(以任何顺序),则类或枚举名将隐藏在变量、数据成员、函数或枚举数名可见的地方。
这是因为规范中说:
类模板不能与其他模板、类、函数、变量、枚举、同一作用域(3.3)中的枚举数、命名空间或类型,(14.5.5)中指定的除外。除了a函数模板可以被同名的(非模板)函数重载,也可以被其他函数重载具有相同名称的函数模板(14.8.3),在命名空间作用域或类中声明的模板名称范围在该范围内必须是唯一的。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么我的for循环不能正确获取argv
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 为什么模板类中的对象不能返回值
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 数组长度,为什么从命令行获取时不能使用它?
- Windows/Cygwin - 不能使用 pybind11 - 犯错误
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 为什么我不能将 rand() 与数组的大小一起使用?
- 为什么虚函数不能是静态的和全局的?
- 为什么我不能在 while 循环中创建线程?
- 为什么QToolButton添加到QToolBar后不能隐藏
- 函数模板不能隐藏类名