Is there any way around this:
class B;
class C {
public:
C() { }
private:
int i;
friend B::B();
};
class B {
public:
B() { }
private:
int i
According to IBM's documentation (which I realize is not normative):
A class Y must be defined before any member of Y can be declared a friend of another class.
So I think the answer is "no".
Of course, you can use
friend class B;
...instead of friend B::B()
, but that grants friendship to all of B's members. And you probably already knew that.