https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80987
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- I think the problem is here in do_class_deduction in gcc/cp/pt.c: vec<tree,va_gc> *args; if (init == NULL_TREE || TREE_CODE (init) == TREE_LIST) args = make_tree_vector_from_list (init); else if (BRACE_ENCLOSED_INITIALIZER_P (init) && !TYPE_HAS_LIST_CTOR (type) && !is_std_init_list (type)) args = make_tree_vector_from_ctor (init); else args = make_tree_vector_single (init); The {it, a} initializer takes the last branch, but if we take the second instead (using make_tree_vector_from_ctor) then it does the right thing.