#include <stdio.h>
template <typename F>
class Caller {
F *call;
};
template <typename T>
class classT
{
public:
T m_val;
classT(T a):m_val(a) {};
T get() {return m_val;};
T set(T a) {T i; i = m_val; m_val = a; return i;}
};
template <typename T>
T funcT(T a_v1)
{
return a_v1 * a_v1;
}
main()
{
typedef int (*TypeF)(int);
int res;
int (*funcP)(int);
classT<double> cp(3);
Caller<TypeF> caller;
res = 3;
funcP = funcT<int>;
res = funcP(res);
printf("res=%d\n", res);
}