Как find_type
Знаешь, где находится функция typemap
?
Аргумент, который он получает, не из этого пространства имен, это из пространства имен std
!Почему этот случай ADL работает?
#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, "");
Как этот код может работать? Каково правило, позволяющее это?
Я тестировал его с помощью GCC 6.3 и clang 3.9.1.
Параметр параметра шаблона 'T' из struct' find_type' является 'std :: unique_ptr'. 'std :: unique_ptr' рассматривает параметр шаблона' test :: Test' для ADL и, таким образом, находит функцию 'typemap' в' test' NS –
SebNag