BUG: C2248: Statics in Friends, No Access to Protected Members

ID: Q167966


The information in this article applies to:


SYMPTOMS

When you create a static object created in a friend function, it is denied access to protected members of a class and compiler error C2248 appears as follows:

'member' : cannot access protected member declared in class 'class'


RESOLUTION

Create the static object using the new operator.


STATUS

Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article.


MORE INFORMATION

The following sample demonstrates the problem and the workaround.

Sample Code


   #include <iostream>

   //#define WORKAROUND //Uncomment this line for workaround

   class A
   {
   protected:
   A() { std::cout << "A()" << std::endl ;}
   ~A() { std::cout << "~A()" << std::endl ;};

   friend A* GetA();
   };

   A* GetA()
   {
   #ifndef WORKAROUND

     static A a ;
     return &a ;

   #else

     static A *pA = new A;
     return pA;

   #endif
   }

   void main()
   {
    A *pA = GetA() ;
   } 

Additional query words:


Keywords          : kbcode kbtool kbVC500bug kbVC600bug 
Version           : winnt:5.0,6.0
Platform          : winnt 
Issue type        : kbbug 

Last Reviewed: March 14, 1999