Compiler Error C2896

'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);
}