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