In order to instantiate a function template, every template argument must be known, but not every template argument has to be specified. When possible, the compiler will deduce the missing template arguments from the function arguments. This occurs when a function call is attempted, when an address of a function template is taken, and in some other contexts:
template<typename To, typename From> To convert(From f);
void g(double d)
{
int i = convert<int>(d); // calls convert&l