#include <iostream>
using namespace std;
template <typename T, typename F>
void todo(const T& param, const F& function)
{
function(param);
}
void foo(double a)
{
cout << "double " << a << endl;
}
void foo(int a)
{
cout << "int " << a << endl;
}
int main()
{
int iA = 1051;
todo(iA, static_cast<void (*)(int)>(&foo));
todo(iA, static_cast<void (*)(double)>(&foo));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEY+CnZvaWQgdG9kbyhjb25zdCBUJiBwYXJhbSwgY29uc3QgRiYgZnVuY3Rpb24pCnsKICBmdW5jdGlvbihwYXJhbSk7Cn0Kdm9pZCBmb28oZG91YmxlIGEpCnsKICBjb3V0IDw8ICJkb3VibGUgIiA8PCBhIDw8IGVuZGw7Cn0KCnZvaWQgZm9vKGludCBhKQp7CiAgY291dCA8PCAiaW50ICIgPDwgYSA8PCBlbmRsOwp9CgppbnQgbWFpbigpCnsKICBpbnQgaUEgPSAxMDUxOwoKICB0b2RvKGlBLCBzdGF0aWNfY2FzdDx2b2lkICgqKShpbnQpPigmZm9vKSk7CiAgdG9kbyhpQSwgc3RhdGljX2Nhc3Q8dm9pZCAoKikoZG91YmxlKT4oJmZvbykpOwoKICByZXR1cm4gMDsKfQ==