"Error C2248" complier error when you declare a template parameter type as a friend class of a template class in Visual C++ (168384)
The information in this article applies to:
- Microsoft Visual C++, 32-bit Enterprise Edition 5.0
- Microsoft Visual C++, 32-bit Enterprise Edition 6.0
- Microsoft Visual C++, 32-bit Professional Edition 5.0
- Microsoft Visual C++, 32-bit Professional Edition 6.0
- Microsoft Visual C++, 32-bit Learning Edition 6.0
- Microsoft Visual C++ .NET (2003)
- Microsoft Visual C++ .NET (2002)
- Microsoft Visual C++ 2005 Express Edition
This article was previously published under Q168384 SYMPTOMS Declaring a template parameter type as a friend class of a
template class, causes the compiler error C2248: error
C2248: 'xx' : cannot access private member declared in class 'XX<class
T>' Member access is not granted to friend class T, where T is a
template parameter of the template class XX. CAUSE The compiler treats typename T as a regular C++ class and
not a template parameter type. This implies the following:
- typename T, where T is a template parameter type is not
granted access to private members of the template class.
- A regular C++ class named class T is granted access to
private members of the template class.
RESOLUTION Do not declare a template parameter type as a friend of a
template class. Specify the friend class using the regular C++ class name.
STATUS This behavior is by design as per C++ standard section
7.1.5.3 paragraph 2.
Modification Type: | Major | Last Reviewed: | 1/9/2006 |
---|
Keywords: | kbtshoot kbCompiler kbCPPonly kberrmsg kbLangCPP kbprb KB168384 kbAudDeveloper |
---|
|