Article: Q214619
Product(s): Microsoft C Compiler
Version(s): 6.0
Operating System(s):
Keyword(s): kberrmsg kbCompiler kbCPPonly kbLangCPP kbVC600bug kbDSupport
Last Modified: 11-FEB-2002
-------------------------------------------------------------------------------
The information in this article applies to:
- Microsoft Visual C++, 32-bit Enterprise Edition, version 6.0
- Microsoft Visual C++, 32-bit Professional Edition, version 6.0
- Microsoft Visual C++, 32-bit Learning Edition, version 6.0
-------------------------------------------------------------------------------
SYMPTOMS
========
When you compile a template class that references a type that is defined in a
base template class, the following error message might appear:
error C2653: '<type-name>' : is not a class or namespace name
RESOLUTION
==========
To work around this problem, reimplement the typedef down the hierarchy of
derived classes.
STATUS
======
Microsoft has confirmed this to be a bug in the Microsoft products listed at the
beginning of this article.
This problem was corrected in Microsoft Visual C++ .NET.
MORE INFORMATION
================
The following sample code reproduces the behavior:
Compile options needed: None.
template <class T>
struct A
{
typedef int MyIntA;
};
template <class T>
struct B
{
typedef A<T> ATempl;
};
template <class T>
struct C : public B<T>
{
// Uncomment the following line for the workaround.
// typedef A<T> ATempl;
};
template <class T>
struct D: public C< A<T> >
{
typedef typename ATempl::MyIntA MyIntD; // Does not inherit from
// class B.
};
Additional query words:
======================================================================
Keywords : kberrmsg kbCompiler kbCPPonly kbLangCPP kbVC600bug kbDSupport
Technology : kbVCsearch kbAudDeveloper kbVC600 kbVC32bitSearch
Version : :6.0
Issue type : kbbug
Solution Type : kbfix
=============================================================================