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.

Reply via email to