This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: 4.1.2 20060928 bug?: undefined overloaded friend function for function pointer
- From: Dawser Stevens <dawser at sbcglobal dot net>
- To: gcc at gcc dot gnu dot org
- Date: Fri, 15 Dec 2006 16:24:04 -0800 (PST)
- Subject: Re: 4.1.2 20060928 bug?: undefined overloaded friend function for function pointer
I don't know if this bug has already been fixed. I
tried to search the archives and found one that looked
vaguely similar, about function pointers and
templates, but it wasn't exactly the same.
I am using the stock compiler in Ubuntu Edgy, gcc
4.1.2 20060928. I believe it is a prerelease of 4.1.2.
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&)
This is the code:
-------------------------------------------------
class A {
public:
int val(void) { return x; }
friend void f (A &a, const int &b) { a.x = b; }
friend void f (A &a) { a.x = 0; }
private:
int x;
};
typedef void (*fptr) (A &a, const int &b);
int main (void)
{
A a;
int b = 1;
fptr g;
g = f;
g (a, b);
return a.val();
}
--------------------------------------------------
I suspect the problem can create big compatibility
problems with already written math code (e.g.
matrix/vector operations), and Ubuntu is currently
shipping this version, potentially affecting many,
many users.
Thanks a lot, and sorry if it is a duplicate or known
issue. I couldn't find anything similar.