BUG: C2248: Statics in Friends, No Access to Protected MembersID: Q167966 
  | 
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'
Create the static object using the new operator.
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article.
The following sample demonstrates the problem and the workaround.
   #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