У вас действительно могут быть шаблоны функций с одинаковыми именами, одинаковыми типами параметров и одинаковым типом возврата (но вы не можете использовать обычные функции).
template <class T>
int f() {/*..*/}
template <class T>
short f() {/*..*/}
Но тогда их использование не очень просто / хорошо:
auto i = static_cast<int(*)()>(&f<float>)(); // Call int f<float>
auto s = static_cast<short(*)()>(&f<float>)(); // Call short f<float>