template argument deduction

When you call a template function, you may omit any template argument that the compiler can determine or deduce by the usage and context of that template function call.
```
#include <iostream>
#include <type_traits>

using namespace std;

template<typename T, typename U>
void f(T, U) {
    cout << is_same_v<T, U>;
}

int main() {
    int i = 0;
    double d = 0.0;
    f(i, d); 
    f<int>(i, d); 
    f<double>(i, d); 
}
//001
```