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