https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77733
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- When template argument deduction is involved and the list of candidates is displayed, the fixit becomes more useful, as the relevant function can get lost in the list of failed overload resolution candidates: struct X { }; struct Y { void foo(); void foo(X&&); void foo(int, const X&); template<typename T> void foo(T, X&&); }; int main() { X x; Y y; y.foo(x); } move.cc: In function ‘int main()’: move.cc:14:10: error: no matching function for call to ‘Y::foo(X&)’ y.foo(x); ^ move.cc:5:8: note: candidate: void Y::foo(X&&) <near match> void foo(X&&); ^~~ move.cc:5:8: note: conversion of argument 1 would be ill-formed: move.cc:14:10: error: cannot bind rvalue reference of type ‘X&&’ to lvalue of type ‘X’ y.foo(x); ^ move.cc:4:8: note: candidate: void Y::foo() void foo(); ^~~ move.cc:4:8: note: candidate expects 0 arguments, 1 provided move.cc:6:8: note: candidate: void Y::foo(int, const X&) void foo(int, const X&); ^~~ move.cc:6:8: note: candidate expects 2 arguments, 1 provided move.cc:7:29: note: candidate: template<class T> void Y::foo(T, X&&) template<typename T> void foo(T, X&&); ^~~ move.cc:7:29: note: template argument deduction/substitution failed: move.cc:14:10: note: candidate expects 2 arguments, 1 provided y.foo(x); ^ As well as a fixit hint suggesting to use std::move it might be useful to display the "<near match>" text in colour so it stands out. This example was reduced from: #include <set> int main() { std::set<int>::node_type x; std::set<int> y; y.insert(x); } Which produces 48 lines of output (and they're long lines, so fill two pages at 80 columns) so highlighting the <near match> and adding a fixit hint would make a big difference.