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
Since you're very selective about friendship (access to specific member functions given to specific classes), the Attorney-Client Idiom may be what you need. I'm not sure how well this will work with constructors, though.