https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80290
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- All memory is allocated during Run till exit from #84 0x000000000080a9f7 in check_initializer ( decl=<var_decl 0x7ffff4ecdea0 frus>, init=<constructor 0x7ffff4dc2678>, flags=5, cleanups=0x7fffffffd7f0) at /space/rguenther/src/svn/gcc-7-branch/gcc/cp/decl.c:6318 ... Run till exit from #104 0x00000000009d4b2f in expand_default_init ( binfo=<tree_binfo 0x7ffff4ece960>, true_exp=<var_decl 0x7ffff4ecdea0 frus>, exp=<var_decl 0x7ffff4ecdea0 frus>, init=<constructor 0x7ffff4dc2678>, flags=5, complain=3) at /space/rguenther/src/svn/gcc-7-branch/gcc/cp/init.c:1787 where it all the time does template instantiation and overload resolution. I wonder if some trivial caching of "last elements overload set" during initializer processing could speed up things dramatically and avoid generating so much garbage (we don't GC during a single check_initializer call).