Microsoft KB Archive/167351

From BetaArchive Wiki

Article ID: 167351

Article Last Modified on 12/2/2003



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 Q167351

SYMPTOMS

A using declaration causes the following error:

error C2327: 'B::A::T2' : member from enclosing class is not a type name, static, or enumerator

CAUSE

The name specified in a using declaration has the same name as an identifier in the template argument list of a templated class.

RESOLUTION

Modify the name in the using declaration or modify the name of the identifier in the template argument list (see sample code below).

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

Sample Code

   // Sample Code that causes the error.


   template <class T1> struct A {
   int x;
   T1 y;
   int T2;
   };

   template <class T2> struct B : A<T2> {
   using A<T2>::T2;
   };

   // Sample Code that works around the error by changing the template
   // argument list.

   template <class T1> struct A {
   int x;
   T1 y;
   int T2;
   };

   template <class T3> struct B : A<T3> {
   using A<T3>::T2;
   };
                

Keywords: kbbug kbfix kbnoupdate kbcode KB167351