FIX: Type Definition Is Not Inherited in Derived Template Class (214619)



The information in this article applies to:

  • Microsoft Visual C++, 32-bit Enterprise Edition 6.0
  • Microsoft Visual C++, 32-bit Professional Edition 6.0
  • Microsoft Visual C++, 32-bit Learning Edition 6.0

This article was previously published under Q214619

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 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 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.
};
				

Modification Type:MajorLast Reviewed:11/18/2003
Keywords:kbBug kbCompiler kbCPPonly kberrmsg kbfix kbLangCPP KB214619