In the following code
template <typename T>
void f() {}
template <typename T, typename U>
void f() {}
template <typename T>
void g() { f<T>(); }
Here, even though f is unresolved, it cannot match the second case because U doesn't have a default value.