https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90265
--- Comment #3 from Marek Polacek <mpolacek at gcc dot gnu.org> --- This fixes it: --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -18881,7 +18881,8 @@ tsubst_copy_and_build (tree t, if (thisarg) { /* Shift the other args over to make room. */ - vec_safe_push (call_args, (*call_args)[nargs-1]); + tree last = (*call_args)[nargs - 1]; + vec_safe_push (call_args, last); for (int i = nargs-1; i > 0; --i) (*call_args)[i] = (*call_args)[i-1]; (*call_args)[0] = thisarg;