https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109175
--- Comment #5 from Mathieu Malaterre <malat at debian dot org> --- c-reduce(d) ugly version: % cat demo3.cc struct d { using b = float &; }; template <typename> using c = d::b; struct e { using b = c<float>; }; template <long, typename> struct j; template <long f, typename g> using h = typename j<f, g>::b; template <long, typename...> struct p; template <typename k, typename... l> struct p<0, k, l...> { using b = k; }; template <typename...> class m; template <typename n> struct aa { aa(n t) : o(t) {} static n ab(aa t) { return t.o; } n o; }; template <long, typename...> struct q; template <long r, typename n, typename... s> struct q<r, n, s...> : q<1, s...>, aa<n> { q(n t, s... ac) : q<1, s...>(ac...), aa<n>(t) {} }; template <long r, typename n> struct q<r, n> : aa<n> { q(n t) : aa<n>(t) {} }; template <typename ad, typename ae> class m<ad, ae> : public q<0, ad, ae> { public: m(ad t, ae ac) : q<0, ad, ae>(t, ac) {} }; template <long f, typename... af> struct j<f, m<af...>> { using b = typename p<f, af...>::b; }; template <long f, typename n, typename... s> n ag(q<f, n, s...> t) { return q<f, n>::ab(t); } template <int f, typename... ah> h<f, m<ah...>> ai(m<ah...> t) { return ag(t); } class u { struct aj { using b = float *; }; public: using ak = aj::b; u(ak t, int) : al(t, long()) {} ak w() { return ai<0>(al); } m<ak, int> al; }; struct x : u { using u::u; }; class y { x al; public: using ak = u::ak; using am = int; template <typename an> y(an t, am ac) : al(t, ac) {} e::b operator[](long t) { return z()[t]; } ak z() { return al.w(); } }; void *ao(); template <typename ap> ap *aq(long t) { if (t) return nullptr; return static_cast<ap *>(ao()); } template <typename> using ar = y; template <typename ap> ar<ap> as(long t, void *) { return ar<ap>(aq<ap>(t), int()); } template <typename ap> ar<ap> as(long t) { return as<ap>(t, nullptr); } float v; void at(long t) { long a = sizeof(0), i = 0; auto b = as<float>(t); for (; i < a; ++i) b[i] = v; for (; i < t; ++i) b[i] = 0.0f; } % /usr/lib/gcc-snapshot/bin/g++ -Wall -O2 -o t.o -c demo3.cc demo3.cc: In function 'void at(long int)': demo3.cc:79:10: warning: 'void* __builtin_memset(void*, int, long unsigned int)' writing 4 or more bytes into a region of size 0 overflows the destination [-Wstringop-overflow=] 79 | b[i] = 0.0f; cc1plus: note: destination object is likely at address zero