https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91576
--- Comment #7 from David Binderman <dcb314 at hotmail dot com> --- After much slow reduction, the reduced C++ source code seems to be class b; struct c { using aj = b *; }; struct d { using aj = c::aj; }; struct f { using aj = d::aj; }; template <class, class ao> f::aj ap(ao); template <typename aq> class g { public: aq begin(); aq end(); }; class av { public: virtual int *aw(unsigned long); }; template <typename ax, int *(av::*ay)(ax)> struct h { long ba; av bb; void bc() { ba = long((&bb->*ay)(1)); } }; using bd = h<unsigned long, &av::aw>; class b { struct i { bd bf; void bg() { bf.bc(); } }; public: using bh = int *; using bi = g<bh>; i bj; bi bases() { bj.bg(); } }; class j { virtual bool bl(const int *, unsigned, int, int, int); }; class k : j { bool bl(const int *l, unsigned, int, int, int) { auto e = ap<b>(l); for (int a : e->bases()) ; } }; void bp() { k(); }