template <typename Ret, typename T, Ret(T::*mptr)()>
void f() {}

template <typename Ret, typename T, Ret(T::*mptr)()>
void g()
{
    f<Ret,T,mptr>();
}

struct A {
    int a() { return 0; }
};

int main() {
    g<int, A, &A::a>();
}