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:
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 T> class C { public: C(); private: T *t; }; template <class T> C<T>::C() : t(new T()) // error { } lass A { public: class B { }; }; main() { C<A::B> c; return 0; }
Keywords: kbbug kbfix kbvc600fix KB150885