https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95073

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
This part is still useful, to show the one that *was* found, but couldn't be
called:

q.C:9:15: note: declared here
    9 |   extern void f();
      |               ^


If that is replaced then it's not clear why "expected 0" would be true, and why
N::f wasn't found by ADL. It might also be helpful to explain that a block
scope function declaration suppresses ADL.

So maybe keep the current diagnostic unchanged, but then add a new note after
it?

q.C: In function ‘void g()’:
q.C:11:6: error: too many arguments to function ‘void f()’
   11 |   f(x);
      |      ^
q.C:9:15: note: declared here
    9 |   extern void f();
      |               ^
q.C:11:3: note: block-scope function declaration prevents argument dependent
lookup for unqualified name; did you mean 'N::f'?
  f(x);
  ^
  N::f
q.C:3:8: note: 'N::f' declared here
  void f(X);
       ^


It might be better to say "local" instead of "block-scope" (not strictly
correct, but more likely to be understood by users).

Reply via email to