sya*_*yam 2 c++ fully-qualified-naming language-lawyer explicit-specialization
在最近的讨论中,问题是我们是否应该始终完全限定类定义中当前类的名称,并且在引用当前模板本身时也使用显式专用模板.把它们加起来:
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
};
Run Code Online (Sandbox Code Playgroud)
问题是,没有人可以用严格的事实来支持他们的主张,它只是" 名称查找可能出错 "而不是" meh,从来没有任何问题 ".
为了解决这个问题:这两个约定是否严格等同,或者"坏"有时会在名称查找中引入含糊之处?参考现行标准将是非常好的.
当然,不应该考虑易读性的论点,我真的在询问符合标准的编译器在极端情况下的表现.但是,已知的实现错误也是受欢迎的.
namespace foo {
namespace foo {
typedef int Foo;
}
struct Foo {
int m_foo;
Foo( foo::Foo const& o_foo ):m_foo(o_foo.m_foo) {}
};
}
int main() {
::foo::Foo foo_(::foo::foo::Foo{});
}
Run Code Online (Sandbox Code Playgroud)
总之,Foo.