State-Changed-From-To: open->feedback
State-Changed-Why: For some reason, the testcase didn't make it into the
report. Can you try to send it to me so that I can attach
it to the report?
Thanks
Wolfgang

State-Changed-From-To: feedback->analyzed
State-Changed-Why: Confirmed. This is a smaller testcase:
---------------------------
template <typename T> struct X {
void foo (X);
friend void bar () {}
};
template <typename T>
void X<T>::foo (X x) {}
template struct X<int>;
-----------------------------
There seems to be profound confusion within the compiler
about something, since it says
tmp/g> /home/bangerth/bin/gcc-3.2/bin/gcc -c x.cc
x.cc:7: cannot declare parameter `x' to be of type `X<T>'
x.cc:7: because the following virtual functions are abstract:
x.cc:3: void bar()
This is, of course, entirely bogus.
It worked with 3.0, but is broken with present 3.2.2, 3.3
and 3.4 branches, so it's a regression. The testcase is
so simple that I can't believe that this is something
that hasn't come up yet. Hopefully it's simple to fix.
From playing around, it seems to have to do with the fact
that the friend function is not only declared, but also
defined inside the class; it is instantiated at the place
of first use, which is where the error is displayed.
W.