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);
}
ICAgIHZvaWQgZm9vKCBpbnQgKSB7fQogICAgZG91YmxlIGJhcigpIHsgcmV0dXJuIDMuMTQ7IH0KCiAgICB0ZW1wbGF0ZTwgY2xhc3MgUiwgY2xhc3MgQSA+CiAgICB2b2lkIHRlc3QoICBSICggKm1ldGhvZF9wICkgKEEpKSB7ICB9CiAgICB0ZW1wbGF0ZTwgY2xhc3MgUiA+CiAgICB2b2lkIHRlc3QoICBSICggKm1ldGhvZF9wICkgKCkpIHsgIH0KCiAgICBpbnQgbWFpbigpewogICAgICB0ZXN0KGZvbyk7CiAgICAgIHRlc3QoYmFyKTsKICAgIH0=