http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60419
--- Comment #15 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- So, what about (crashes trunk and 4.8.3) : class J { public: J (); virtual void m_fn1 (int &p1, int); }; template <class TDATA> class D { public: virtual void m_fn1 (TDATA &) const; void m_fn2 () { TDATA p; m_fn1 (p); } }; class I : J { }; class K : J, public D<I> { }; struct F { K *operator->(); }; class N : public K { void m_fn1 (int &p1, int); I mean; void m_fn1 (I &) const {} }; class L; struct M : F { L *operator->(); }; class L : J { public: F poseChange; }; class G { G (); }; M h; G::G () try { N f; f.m_fn2 (); throw; } catch (int) {} void fn1 () { h->poseChange->m_fn2 (); }