> 
> On Fri, Dec 15, 2006 at 04:24:04PM -0800, Dawser Stevens wrote:
> > The following code can be compiled with every other
> > compiler I have tried (including gcc 4.0 apart from
> > several commercial ones), but, unfortunately, gcc
> > 4.1.2 outputs this:
> > 
> > overload.cpp: In function "int main()":
> > overload.cpp:18: error: no matches converting function
> > "f" to type "void (*)(class A&, const int&)"
> > overload.cpp:4: error: candidates are: void f(A&,
> > const int&)
> > overload.cpp:5: error:                 void f(A&)
> 
> I think the problem is tweaked by the fact that the first declarations
> of the "f" functions are in a friend statement.  If I add
> 
> class A;
> void f(A &a, const int &b);
> void f(A &a);
> 
> before the class, the code compiles.
> 
> The standard compiler on Fedora Core 5 (4.1.1 + patches) also shows
> this problem, yet they built a distro with it, so I think that it's
> not a huge issue.

This is not an issue since this is actually invalid C++ and has already been 
documented
on http://gcc.gnu.org/gcc-4.1/changes.html:
# ARM-style name-injection of friend declarations is no longer the default. For 
example:

          struct S {
            friend void f();
          };

          void g() { f(); }

will not be accepted; instead a declaration of f will need to be present 
outside of the scope of S. The new -ffriend-injection option will enable the 
old behavior.


Thanks,
Andrew Pinski

Reply via email to