https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84768
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- oldelt is <tree_list 0x7fffefd9f280 purpose <error_mark 0x7fffefc45e58> value <error_mark 0x7fffefc45e58>> It has been created in: /* Add it to the list. */ if (parameter != error_mark_node) parameter_list = process_template_parm (parameter_list, parm_loc, parameter, is_non_type, is_parameter_pack); else { tree err_parm = build_tree_list (parameter, parameter); parameter_list = chainon (parameter_list, err_parm); } which looks like it is intentional that way (r116661), so probably need to handle error_mark_node somewhere else, maybe in build_deduction_guide?