// Simple smoke test to see that the demangler is actually working namespace abc { template <typename T1, typename T2> class def { public: T1 xyzzy(T1 *p, T2 *) { return *p ? 10 : 20; } }; }; template <typename T> class magic { public: T xyzzy(T *p) { return (new abc::def<int,typeof(*this)>)->xyzzy(p, 0); } }; int main() { magic<int> *c = new magic<int>; c->xyzzy(new int); return 0; }