find_type
はどのように機能がtypemap
であるかを知っていますか?
受け取る引数は、そのネームスペースからではなく、std
名前空間です。なぜこのADLのケースが機能していますか?
このコードはどのように機能しますか?これを可能にするルールは何ですか?
私はそれをGCC 6.3でテストし、3.9.1でテストしました。
find_type
はどのように機能がtypemap
であるかを知っていますか?
受け取る引数は、そのネームスペースからではなく、std
名前空間です。なぜこのADLのケースが機能していますか?
このコードはどのように機能しますか?これを可能にするルールは何ですか?
私はそれをGCC 6.3でテストし、3.9.1でテストしました。
§3.4.2[basic.lookup.argdep](2.2)
Tは(組合を含む)クラス型である場合、それに関連するクラスがある:クラス自体。それがあるクラス もしあればメンバー。その直接的および間接的な基底クラスです。関連する名前空間は、関連付けられたクラスの名前空間を囲む最も内側の です。さらに、Tがクラステンプレートの特殊化である場合、 の関連する名前空間およびクラスには、も含まれます。テンプレートタイプパラメータ(テンプレートテンプレート パラメータを除く)のテンプレート引数の タイプに関連付けられた名前空間およびクラス。テンプレートテンプレート引数がメンバである名前空間。テンプレートテンプレート引数として使用されるメンバテンプレートのすべてがメンバーであるクラス があります。
typemap
の引数がstd::unique_ptr<test::Test>
なので、名前空間test
は名前をルックアップすると考えられています。
受け取る引数は、その名前空間からではなく、std名前空間からのものです。
すべてではありません!
using type = decltype(typemap(std::declval<T>()));
これは、次のとおりです。名前空間test
があまりにも検索されるよう
using type = decltype(typemap(std::declval<std::unique_ptr<test::Test>>()));
が、そこでtest::
をあります。
構造体 'find_type'からのテンプレートパラメータ' T'のパラメータ型は 'std :: unique_ptr'です。 'std :: unique_ptr'はADLの' test :: Test'テンプレートパラメータを考慮して 'test' NSの' typemap'関数を探します –
SebNag