This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Bug, forward friend declaration
- To: egcs-bugs at egcs dot cygnus dot com
- Subject: Bug, forward friend declaration
- From: Nathan Sidwell <nathan at acm dot org>
- Date: Mon, 08 Feb 1999 14:41:34 +0000
- Organization: University of Bristol
- Reply-To: nathan at compsci dot bristol dot ac dot uk
Hi,
It appears egcs does not permit you to declare a member function of an
incomplete class to be a friend. This means you cannot define two classes with
mutually friendly member functions -- unless you make the classes friends. I
attach a test case, suitable for insertion into the test suite.
with the 19990131 snapshot, I get,
nathan@manao:549>uname -a && ss-g++ -v
SunOS manao 5.6 Generic_105181-03 sun4u sparc SUNW,Ultra-5_10
Reading specs from
/local/nathan/ss/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.93.04/specs
gcc version egcs-2.93.04 19990131 (gcc2 ss-980929 experimental)
nathan@manao:550>ss-g++ friend
friend.ii friend6.C
nathan@manao:550>ss-g++ friend6.C -c
friend6.C:12: member `B::fn()' declared as friend before type `B' defined
The CD2 11.4 (class.friend) para 4 talks about making X::foo a friend of Y. It
does not mention whether X has to be declared at that point.
I believe the diagnostic to be incorrect, if I am wrong, could someone point me
to the relevant part of the standard?
nathan
--
Dr Nathan Sidwell :: Computer Science Department :: Bristol University
You can up the bandwidth, but you can't up the speed of light
nathan@acm.org http://www.cs.bris.ac.uk/~nathan/ nathan@cs.bris.ac.uk
// Build don't link:
// Copyright (C) 1999 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 8 Feb 1999 <nathan@acm.org>
// Check mutual friendship
class A;
class B;
class A
{
friend void B::fn();
public:
void A::fn();
};
class B
{
friend void A::fn();
public:
void B::fn();
};