[英]Doesn't ADL considers namespaces associated with template argument?
考虑简单的代码:
template<int N> struct foo{};
namespace N
{
const int a=1;
void bar(foo<1>& x){}
}
int main()
{
bar(foo<N::a>());
return 0;
}
代码不行吗? 我为什么不知道为什么它不起作用。 谢谢
[basic.lookup.argdep] / 2:
[注意:非类型模板参数不会影响相关联的名称空间。
对于注释中链接的代码,命名空间中的typedef也不足够,但由于其他原因。 查找基于解析的类型,而不是基于包含typedef
本身的名称空间(或等效地using
)。
例如,如果您有如下代码:
namespace A {
class T {};
}
namespace B {
typedef A::T TT;
}
使用B::TT
作为参数会将namespace A
添加到查找中,但不会将namespace B
添加到查找中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.