'function1' : cannot use function template 'function2' as argument
A function template cannot be an argument to another function template.
Example
template<class T1, class T2> void f1(void(*)(T1, T2)); template<class T1, class T2> void f2(T1, T2); void g() { f1(f2); }