With function pointers you can achieve something like; in most cases even this is only possible at runtime:

 

 

PFvvE
PFvvE
Just one function f.
Just one function f.
f<double>
f<int>

 

 

from

https://godbolt.org/z/jz6qMn5f3

 

 

#include<iostream>
usingnamespace std;

template<typename T>
void f()
{
    cout << "Just one function f." << endl;
}

void printType(auto fkt)
{
    if (fkt == f<double>)
        cout << "f<double>" << endl;
    if (fkt == f<int>)
        cout << "f<int>" << endl;
}


int main()
{
    auto f1 = f<double>;
    auto f2 = f<int>;

    cout << typeid(f1).name() << endl;
    cout << typeid(f2).name() << endl;

    f1();
    f2();

    printType(f1);
    printType(f2);

    return0;
}