With function pointers you can achieve something like; in most cases even this is only possible at runtime:
PFvvE <--| do you see the problem here
PFvvE <--| f<int>,f<double>, yet the same name
Just one function f.
Just one function f.
f<double>
f<int>