簡體   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