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.