#include <iostream>

template < typename T > struct A
{
    template< void (*FN) (T) > static void call( T arg ) { FN(arg) ; }

	static void call( void (*fn)(T), T arg ) { fn(arg) ; }
};

void foo( int a ) { std::cout << "foo(" << a << ")\n" ; }

int main()
{
    A<int>::call<foo>(1) ;

    A<int>::call( foo, 2 ) ;
}
