Microsoft KB Archive/150885

= FIX: C2321 Expanding Template with a Pointer to a Nested Class =

Article ID: 150885

Article Last Modified on 7/5/2005

-

APPLIES TO


 * Microsoft Visual C++ 4.0 Standard Edition
 * Microsoft Visual C++ 4.1 Subscription
 * Microsoft Visual C++ 4.2 Enterprise Edition
 * Microsoft Visual C++ 4.2 Professional Edition
 * Microsoft Visual C++ 5.0 Enterprise Edition
 * Microsoft Visual C++ 5.0 Professional Edition

-



This article was previously published under Q150885



SYMPTOMS
At the point where a class template is expanded using the new operator to a nested class, the compiler reports the following errors:

[FileName](10) : error C2321: syntax error : unexpected 'A::B'

[FileName](27) : fatal error C1004: unexpected end of file found



STATUS
This bug was corrected in Microsoft Visual C++, version 6.0.



RESOLUTION
There are two possible workarounds to this problem. Each is stated in terms of the sample code below:
 * Remove t(new T) from the initializer list and add t = new T; to the body of the constructor. This workaround assumes class T is not a reference or a constant pointer.
 * Change the definitions of class A and class B so that B is no longer nested in the definition of A.

Sample Code
/* Compile options needed: None */ template  class C { public: C; private: T *t; };

template  C::C : t(new T) // error { }

lass A { public:

class B  { };

};

main {

C c;  return 0;

}

Keywords: kbbug kbfix kbvc600fix KB150885

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.