https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85110
David Malcolm <dmalcolm at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |ASSIGNED Last reconfirmed| |2018-03-28 Assignee|unassigned at gcc dot gnu.org |dmalcolm at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #1 from David Malcolm <dmalcolm at gcc dot gnu.org> --- In build_new_function_call, we have: cand = perform_overload_resolution (fn, *args, &candidates, &any_viable_p, complain); if (!cand) { if (complain & tf_error) { // If there is a single (non-viable) function candidate, // let the error be diagnosed by cp_build_function_call_vec. if (!any_viable_p && candidates && ! candidates->next && (TREE_CODE (candidates->fn) == FUNCTION_DECL)) return cp_build_function_call_vec (candidates->fn, args, complain); ******************************* CASE 1 **************************** // Otherwise, emit notes for non-viable candidates. print_error_for_call_failure (fn, *args, candidates); } [...snip...] } else { [...snip...] ************************CASE 2 ************************************ result = build_over_call (cand, flags, complain); } "CASE 2" is handled by r256448, where perform_overload_resolution has returned a non-NULL candidate, but there's a failure in convert_like_real. This new PR (and the example in comment #0) covers "CASE 1" above.