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>();
}
dGVtcGxhdGUgPHR5cGVuYW1lIFJldCwgdHlwZW5hbWUgVCwgUmV0KFQ6OiptcHRyKSgpPgp2b2lkIGYoKSB7fQoKdGVtcGxhdGUgPHR5cGVuYW1lIFJldCwgdHlwZW5hbWUgVCwgUmV0KFQ6OiptcHRyKSgpPgp2b2lkIGcoKQp7CiAgICBmPFJldCxULG1wdHI+KCk7Cn0KCnN0cnVjdCBBIHsKICAgIGludCBhKCkgeyByZXR1cm4gMDsgfQp9OwoKaW50IG1haW4oKSB7CiAgICBnPGludCwgQSwgJkE6OmE+KCk7Cn0=