Comment find_type
sait où est la fonction typemap
?
L'argument qu'il reçoit ne provient pas de cet espace de noms, il provient de l'espace de noms std
!Pourquoi cette mallette ADL fonctionne-t-elle?
#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, "");
Comment ce code peut-il fonctionner? Quelle est la règle permettant cela? Je l'ai testé avec GCC 6.3 et 3.9.1.
Le type de paramètre du paramètre de modèle 'T' de la structure' find_type' est 'std :: unique_ptr'. 'std :: unique_ptr' considère le paramètre template' test :: Test' pour ADL, et donc trouve la fonction 'typemap' dans le' test' NS –
SebNag