Wie weiß find_type
, wo die Funktion typemap
ist?
Das Argument, das es empfängt, stammt nicht aus dem Namespace, sondern aus dem Namespace std
!Warum funktioniert dieser ADL-Fall?
#include <type_traits>
#include <memory>
namespace lib {
template<typename T>
struct find_type {
using type = decltype(typemap(std::declval<T>()));
};
}
namespace test {
struct Test {};
auto typemap(std::unique_ptr<Test>) -> int;
}
static_assert(std::is_same<int, lib::find_type<std::unique_ptr<test::Test>>::type>::value, "");
Wie kann dieser Code funktionieren? Was erlaubt die Regel?
Ich testete es mit GCC 6.3 und kling 3.9.1.
Der Parametertyp des Template-Parameters 'T' aus der Struktur' find_type' ist 'std :: unique_ptr'. 'std :: unique_ptr' berücksichtigt den Template-Parameter' test :: Test' für ADL und findet somit die 'typecap'-Funktion im' test'-NS –
SebNag