help-gplusplus
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: g++ 4: Unrecognised Friendship


From: red floyd
Subject: Re: g++ 4: Unrecognised Friendship
Date: Wed, 03 Aug 2005 17:17:22 GMT
User-agent: Mozilla Thunderbird 1.0.6 (Windows/20050716)

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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]