BUG: Using Declaration Causes C2327

ID: Q167351


The information in this article applies to:


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 this to be a bug in the Microsoft products listed at the beginning of this article.


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

Additional query words:


Keywords          : kbcode kbtool kbVC500bug kbVC600bug 
Version           : winnt:5.0,6.0
Platform          : winnt 
Issue type        : kbbug 

Last Reviewed: March 14, 1999