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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|WAITING                     |RESOLVED
         Resolution|---                         |FIXED

--- Comment #4 from Eric Gallager <egallager at gcc dot gnu.org> ---
(In reply to Eric Gallager from comment #3)
> (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.

No reply so I guess it's better enough.

Reply via email to