    void foo( int ) {}
    double bar() { return 3.14; }

    template< class R, class A >
    void test(  R ( *method_p ) (A)) {  }
    template< class R >
    void test(  R ( *method_p ) ()) {  }

    int main(){
      test(foo);
      test(bar);
    }