https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118201
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Slightly reduced: class A {}; class B : public virtual A {}; struct C : public virtual A { virtual unsigned int foo () const = 0; }; class D : public virtual B, public virtual C {}; struct E { virtual ~E () {} }; struct F : public virtual E { virtual void bar () = 0; }; class G : public virtual E {}; class H { ~H () = default; }; template <class T> class I : public T, public virtual H { ~I () = default; }; template <class T> struct J : public I<D> { unsigned int foo () const { return 1; } T j; ~J () = default; }; template <class T> class K : public J<T>, public I<F> { void bar () {} int d; ~K () = default; }; template <class T> class L : public K<T> {}; class M : public A { int m; ~M () = default; }; class N : public A { M n; int a; ~N () = default; }; template class L<N>; int main () { L<N> foo; }