http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45329
Manuel López-Ibáñez <manu at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2010.11.18 00:17:00
CC| |manu at gcc dot gnu.org
Ever Confirmed|0 |1
--- Comment #2 from Manuel López-Ibáñez <manu at gcc dot gnu.org> 2010-11-18
00:17:00 UTC ---
(In reply to comment #1)
> I think the patch that has just been posted is awesome.
Agreed!
> In either case, assuming that a sufficient number of arguments are
> involved and if they are all templates of the kind std::vector<std::vector<T>>
> (with all the defaulted template arguments) it becomes essentially impossible
> to see easily why the call failed.
Testcase?
> 1 pr45329.C:26:7: error: no matching function for call to 'foo(int&)'
> 2 cc1plus: note: candidates are:
> 3 pr45329.C:7:5: note: int foo(int, int)
> 4 pr45329.C:7:5: candidate expects 2 arguments, 1 provided
> 5 pr45329.C:19:5: note: int foo(const S&)
> 6 pr45329.C:19:5: no known conversion for argument 1 from 'int' to
> 'const
> S&'
> (note the lack of the "note" text on lines 4,6 relative to the patch you
> posted), or
I think the lack of note would be the difficult part. I don't think we have
diagnostics without prefix. And diagnostics do not accept '\n'.
Even if such diagnostic were implemented "note:" is a translated string, so the
indentation has to be relative to it.
>
> 1 pr45329.C:26:7: error: no matching function for call to 'foo(int&)'
> 2 cc1plus: note: candidates are:
> 3 pr45329.C:7:5: int foo(int, int)
> 4 pr45329.C:7:5: reason: candidate expects 2 arguments, 1 provided
> 5 pr45329.C:19:5: int foo(const S&)
> 6 pr45329.C:19:5: reason: no known conversion for argument 1 from 'int'
> to
> 'const S&'
>
> In either case, it breaks up the long list of candidates one often gets into
> self-contained blocks that are easier to parse for the human eye.
I don't see why removing the "notes: " adds/removes blocks, since it is the
same prefix every line. But I like the idea of using a "reason:" prefix, why
not a "candidate:" prefix also?
pr45329.C:26:7: error: no matching function for call to 'foo(int&)'
pr45329.C:7:5: note: candidate: int foo(int, int)
pr45329.C:7:5: note: reason: candidate expects 2 arguments, 1 provided
pr45329.C:19:5: note: candidate: int foo(const S&)
pr45329.C:19:5: note: reason: no known conversion for argument 1 from 'int'
But personally, I would prefer everything in the same line:
pr45329.C:26:7: error: no matching function for call to 'foo(int&)'
pr45329.C:7:5: note: candidate 'int foo(int, int)' expects 2 arguments, 1
provided
pr45329.C:19:5: note: candidate 'int foo(const S&)': no known conversion for
argument 1 from 'int'
I think also that this latest version would require fewer testsuite changes.