https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80956
--- Comment #6 from Paolo Carlini <paolo.carlini at oracle dot com> --- In this specific case the broken surrogate std::initializer_list cannot be completed because no definition is provided. Maybe something like the below then (untested): Index: call.c =================================================================== --- call.c (revision 259124) +++ call.c (working copy) @@ -6881,7 +6881,9 @@ convert_like_real (conversion *convs, tree expr, t return error_mark_node; /* Build up the initializer_list object. */ - totype = complete_type (totype); + totype = complete_type_or_maybe_complain (totype, NULL_TREE, complain); + if (!totype) + return error_mark_node; field = next_initializable_field (TYPE_FIELDS (totype)); CONSTRUCTOR_APPEND_ELT (vec, field, array); field = next_initializable_field (DECL_CHAIN (field));