JH Trauntvein wrote:
Consider the following example:namespace n1 { class cn1_base; namespace n1_helpers { class helper1 { private: int private_member; friend class cn1_base; }; }; class cn1_base { public: void foo() { n1_helpers::helper1 helper; helper.private_member = 1; } }; }; While this compiled with earlier versions of G++, G++ version 4.x fails to compile this and gives the following message: 'int n1::n1_helpers::helper1::private_member' is prviate within this context Fortunately, I can work around this by changing the friend declaration to the following: friend class n1::n1_base; Is this a bug in the compiler or have I misunderstood something about friendship declarations?
See Standard paragrah 7.3.1.2, subparagraph 3. "If a friend declaration in a non-local class first declares a class or function, the friend class or function is a member of the innermost enclosing namespace."
Sounds to me like it was a bug in earlier g++ versions. _______________________________________________ Help-gplusplus mailing list [email protected] http://lists.gnu.org/mailman/listinfo/help-gplusplus
