function template

A function template is a generic function with type parameters. 
When the function is called, the compiler will replace every instance of type parameters with the concrete type argument that is either specified by the user or deduced by the compiler. 
You can name a type parameter anything you like, but by convention single upper case letters are most commonly used. The typename keyword says that parameter is a placeholder for a type. 
```
#include <iostream>
using namespace std;

template <typename T> // type parameter T
T minv(const T& l, const T& r) {
    return l < r ? l : r;
}

int main() {
    cout<<minv<int>(1,2)<<endl; // type argument specified by user
    cout<<minv(3,4)<<endl; // type argument deduced by compiler
}
```