https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94751
David Binderman <dcb314 at hotmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |dcb314 at hotmail dot com --- Comment #3 from David Binderman <dcb314 at hotmail dot com> --- Reduced code is: template <int a> struct c { static constexpr int d = a; }; template <bool, typename> struct e; template <typename f> struct e<true, f> { typedef f g; }; template <typename f> f aa(); class h { public: template <typename i, typename... j> void ab(i *, j...) { i(j()...); } }; template <typename> using k = h; template <typename> class l : public k<int> {}; template <typename> struct m; template <typename f> struct m<l<f>> { using n = l<f>; using o = f *; template <typename i> using p = l<i>; template <typename i, typename... j> static void ab(n ac, i q, j...) { ac.ab(q, j()...); } }; template <typename...> struct r; struct s : m<l<r<float>>> { struct ad { typedef p<r<float>> ae; }; }; template <typename> struct af; template <long, typename f> using ag = typename af<f>::g; template <typename> class ah {}; template <typename ai, typename... u> struct af<ah<ai, u...>> { typedef ai g; }; template <long aj, typename... v> ag<aj, ah<v...>> ak(ah<v...>); class al { public: template <typename w> void operator=(w); }; struct am { struct an { s::o ao; }; struct : s::ad::ae, an { } ap; }; template <typename, typename = int> class x : am { public: template <typename... j> s aq(j &&...); }; template <typename f, typename ar> template <typename... j> s x<f, ar>::aq(j &&...) { s::ab(ap, ap.ao, aa<j>()...); } template <typename...> class as; template <typename... at> struct r { int au; r(at...); template <typename av> void aw(av); }; class y { public: static constexpr struct { template <typename ax> typename e<c<false>::d, ax>::g ay(); template <typename ax> static typename e<!c<false>::d, ax>::g ay(); } az{}; }; template <int ba> struct z { static void bb() { ah<al> b; ak<ba>(b) = y::az.ay<int>; } }; template <typename bc, typename bd> void be(bc, bd) { z<0>::bb; } template <typename... at> r<at...>::r(at...) { aw(y::az); } template <typename... at> template <typename av> void r<at...>::aw(av ac) { be(au, ac); } template <typename ax> class as<ax> { public: as &bf(); x<int> bg; }; template <typename ax> as<ax> &as<ax>::bf() { ax t; bg.aq(t); } template <typename... at> as<at...> bh(at...); auto bi = bh(1.0f).bf();