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(); }