在最近的一次讨论中,关于我们是否应该始终在类定义中完全限定当前类的名称以及在引用当前模板本身时还使用显式专用模板的问题出现了。把它们加起来:
namespace foo {
struct Foo {
doSomething(foo::Foo& other); // arguably good
doSomething(Foo& other); // arguably bad
};
}
template<typename T>
struct Bar {
doSomething(Bar<T>& other); // arguably good
doSomething(Bar& other); // arguably bad
};
问题是,没有人可以用确凿的事实来支持他们的说法,这仅仅是“名称查找可能出错”与“嗯,从来没有任何问题”。
为了解决这个问题:这两个约定是严格等效的,还是“坏”的约定有时会在名称查找中引入歧义?对当前标准的引用会非常好。
当然,不应该考虑易读性的论点,我真的在问符合标准的编译器在极端情况下会如何表现。但是,也欢迎已知的实现错误。