我在两个编译器上进行了测试,并且惊讶地看到它们都支持以下定义而没有投诉:
class A {
A();
};
A::A::A() {}
^^^
请注意,这也适用于方法,尽管在声明过度限定时会标记它。
问题:
更新了详细信息:
如果原始问题不明确或太短:我很好奇为什么在定义上允许多余的资格认证(重点也在上面添加)。
Clang Apple的GCC 4.2 + LLVM是编译器
答案 0 :(得分:18)
是的,允许(§9/ 2):
类名也插入到类本身的范围内;这被称为注入类名。出于访问检查的目的,inject-class-name被视为公共成员名称。
有关导致课程名称注入的原因的信息,您可能需要阅读N0444。