https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92508
--- Comment #5 from David Binderman <dcb314 at hotmail dot com> --- I am not sure if this is the same C++ code as the other reduced test case: typedef enum { a, b } c; typedef struct { c d; } e; void f(char()); template <typename, template <typename> class> using g = int; class h {}; struct i { template <typename j> using k = typename j::b; }; struct n : i { using ab = g<int, k>; }; class o { struct l { l(n::ab, h); } m; public: o(char *, h p = h()) : m(0, p) {} ~o(); }; class D { public: char *q(); virtual int r(); }; class s { public: static s t(); void m_fn4(char *, o); }; class G { public: virtual bool u(); e al; }; class I : public D, public G { public: int an; }; int ao; class v : I { bool u(); void m_fn6(); bool ar; }; int w(int, int *); void x(); void v::m_fn6() { u(); } bool v::u() { char *au = q(); s::t().m_fn4(au, ""); if (ar && w(an, &ao)) { x(); return false; } if (al.d == b) { al.d = a; f(nullptr); } return true; }