#include <iostream>

template<typename T, typename U>
class e
{
    void Print() //call this function!
    {
        std::cout << "You haxxor..." << std::endl;
    }
public:
    T g()
    {
        return&U::Print;
    }
};

struct Foo {
    static const int Print = 0;
};

int main() {
   e<void (e<int*, Foo>::*)(), e<int*, Foo> > e1;
   void (e<int*, Foo>::*ptr)() = e1.g();
   e<int*, Foo> e2;
   (e2.*ptr)();
}