Article ID: 167966
Article Last Modified on 7/5/2005
APPLIES TO
- Microsoft Visual C++ 5.0 Enterprise Edition
- Microsoft Visual C++ 6.0 Enterprise Edition
- Microsoft Visual C++ 5.0 Professional Edition
- Microsoft Visual C++ 6.0 Professional Edition
- Microsoft Visual C++ 6.0 Standard Edition
This article was previously published under Q167966
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:
RESOLUTION
Create the static object using the new operator.
STATUS
Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.
This problem was corrected in Microsoft Visual C++ .NET.
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() ; }
Keywords: kbbug kbfix kbnoupdate kbcode KB167966