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";
}