https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92260
--- Comment #2 from David Binderman <dcb314 at hotmail dot com> --- The reduced C++ code seems to be: extern "C" int abs(int); enum { a }; typedef int (*b)(const unsigned char *, long, const unsigned char *, long); struct f { struct { b c; } cu[]; }; template <int d, int> int e(const unsigned char *g, long h, unsigned char *m, long) { int i; for (int j; j; j++) { for (int k = 0; k < d; k++) i += abs(g[k] - m[k]); g += h; } return i; } template <int> int l(const unsigned char *, long, const unsigned char *m, long n) { unsigned char o[1]; int p(e<4, 4>(m, n, o, 0)); return p; } void q(f &g) { g.cu[a].c = l<a>; }