template<class T> void f() { };
template<int i> void f() { };
int main() {
f<int()>();
}
The function call f<int()>() calls
the function with T as a template argument – the
compiler considers int() as a type – and therefore
implicitly instantiates and calls the first f().