template <typename T, typename K, K (T::*F)() const = &T::get>
struct Foo
{
K retrieve(const T & t) { return (t.*F)(); }
};
struct X { int get() const { return 9; } };
#include <iostream>
int main()
{
X x;
std::cout << Foo<X, int>().retrieve(x) << "\n";
}
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEssIEsgKFQ6OipGKSgpIGNvbnN0ID0gJlQ6OmdldD4Kc3RydWN0IEZvbwp7CiAgICBLIHJldHJpZXZlKGNvbnN0IFQgJiB0KSB7IHJldHVybiAodC4qRikoKTsgfQp9OwoKc3RydWN0IFggeyBpbnQgZ2V0KCkgY29uc3QgeyByZXR1cm4gOTsgfSB9OwoKI2luY2x1ZGUgPGlvc3RyZWFtPgoKaW50IG1haW4oKQp7CglYIHg7CiAgICBzdGQ6OmNvdXQgPDwgRm9vPFgsIGludD4oKS5yZXRyaWV2ZSh4KSA8PCAiXG4iOwp9