http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59918
--- Comment #2 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- A bit further reduced: class NameValuePairs { public: ~NameValuePairs(); virtual bool m_fn1(const char *, const int &p2, void *) const; }; class B : NameValuePairs {}; class F : virtual public B {}; class G : virtual B {}; class ASN1Object { public: virtual ~ASN1Object(); }; class A { public: NameValuePairs *GetValueHelperClass_searchFirst; A() { GetValueHelperClass_searchFirst->m_fn1(0, 0, 0); } void m_fn1(); }; template <class, class T> A GetValueHelper(T, int) { A(); } template <class BASE> class C : ASN1Object, public BASE {}; template <class GP> class H : public C<F> { GP m_groupParameters; }; template <class BASE> class D : BASE {}; template <class EC> class J : F { bool m_fn1(const char *, const int &p2, void *) const; }; template class D<H<J<int> > >; class I : C<G>, C<F> {}; template <class EC> bool J<EC>::m_fn1(const char *, const int &p2, void *) const { GetValueHelper<F>(0, 0).m_fn1(); }