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

ID: Q167966


The information in this article applies to:
  • The C/C++ Compiler (CL.EXE), used with:
    • Microsoft Visual C++, 32-bit Editions, versions 5.0, 6.0


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
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.