Call less constrained functionally equivalent function
问题 Consider the following code: #include <iostream> #include <type_traits> struct A; template<class T> concept HasParent = std::is_convertible_v<typename T::parent*, A*>; struct A{}; struct B : A { using parent = A; }; template<class T> int foo(T*) { return 1; } template<HasParent T> int foo(T*) { // call the other one? return 2; } int main() { B b; std::cout << foo(&b) << std::endl; // displays 2 return 0; } Is it possible to call the general foo<T>(T*) function from foo<HasParent T>(T*) ?