I want to change the instantiate order of the overload templates. My code are as follow:

```
#include <iostream>
#include <vector>

using namespace std;
template<typename T>
struct Base
{

};
template<typename T>
struct Derived:Base<T>
{

};

//template 1
template<typename T1>
void f(Base<T1>& a){
    cout<<"in 1\n";
}

//template 2
template<typename T2>
void f(T2 b){
    cout<<"in 2\n";
}

int main(){
    Derived<int> v1;
    f(v1);
}

```

The compiler will chose template 2 as default, but I want it to chose template 1.