struct S { template< typename Derv, void (Derv::*PF)() > void thunk(); }; struct Derv : S { void func() {} }; template< typename Derv, void (Derv::*PF)() > void thunk(); void test_func() { &S::thunk< Derv, &Derv::func >; &thunk< Derv, &Derv::func >; }