Как find_type
знать, где находится функция typemap
?
Аргумент, который он получает, не из этого пространства имен, а из пространства имен std
!
#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.