4
这个工作在GCC和科莫:函数模板不能隐藏类名?
struct X {};
void X() {}
这打破了科莫:
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)可以隐藏在同一范围内声明的变量,数据成员,函数或枚举器的名称。如果类或枚举名称和变量,数据成员,函数或枚举器在同一个作用域(以任何顺序)中声明具有相同的名称,则该类或枚举名称在变量,数据成员,函数或枚举器名称是可见的。