繁体   English   中英

ADL是否不考虑与模板参数关联的名称空间?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM