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

Eric Gallager <egallager at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |WAITING
   Last reconfirmed|                            |2017-08-21
                 CC|                            |egallager at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #3 from Eric Gallager <egallager at gcc dot gnu.org> ---
(In reply to lucdanton from comment #0)
> Using ‘gcc version 4.9.0 20140123 (experimental) (GCC)’ with the following
> snippet:
> 
> //--------
> 
> struct foo {
>     typedef void(*ptr)(int&);
>     operator ptr() const;
> };
> 
> int main()
> {
>     foo f;
>     void* p = 0;
>     f(p);
> }
> 
> //--------
> 
> $ g++-trunk -std=c++03 main.cpp 
> main.cpp: In function 'int main()':
> main.cpp:10:8: error: no match for call to '(foo) (void*&)'
>      f(p);
>         ^
> main.cpp:1:8: note: candidate is:
>  struct foo {
>         ^
> main.cpp:10:8: note: foo::ptr {aka void (*)(int&)} <conversion>
>      f(p);
>         ^
> main.cpp:10:8: note:   candidate expects 2 arguments, 2 provided
> 
> Same output for all -std=c++{03,11,1y} modes. If e.g. foo has a call
> operator instead, then the appropriate ‘no known conversion for argument 1
> from 'void*' to 'int&'’ is produced.

Message is now:

$ /usr/local/bin/g++ -c -std=c++03 -Wall -Wextra -pedantic 60095.cc
60095.cc: In function ‘int main()’:
60095.cc:10:8: error: no match for call to ‘(foo) (void*&)’
     f(p);
        ^
60095.cc:10:8: note: candidate: ‘foo::ptr {aka void (*)(int&)}’ <conversion>
60095.cc:10:8: note:   conversion of argument 2 would be ill-formed:
60095.cc:10:8: error: invalid conversion from ‘void*’ to ‘int’ [-fpermissive]
60095.cc:10:8: error: cannot bind rvalue ‘(int)p’ to ‘int&’
$

Is that better enough for you? I think it's still kinda confusing, but at least
there's no longer the bogus "expects 2 arguments, 2 provided" note anymore.

Reply via email to