#include #include #include "prelude.h" using std::cout; using std::endl; struct Apply { template struct Sig : public FunType::ResultType> {}; template typename F::template Sig::ResultType operator()( F f, X x, Y y ) { return f(x,y); } } apply; int main() { cout << typeid(apply( MakePair(), 3, 'c' )).name() << endl; }