FIX: C2227 & C2653 on Explicit Destructor Call in Template (130546)
The information in this article applies to:
- Microsoft Visual C++, 32-bit Professional Edition 2.0
- Microsoft Visual C++, 32-bit Professional Edition 2.1
This article was previously published under Q130546 SYMPTOMS
Compiling a program that includes a class template that makes an explicit
reference to the destructor of the template argument <type_name> generates
the following errors if the class template is instantiated with a simple
type:
error C2227: left of '->type_name' must point to class/struct/union
error C2653: 'type_name' : is not a class name
RESOLUTION
The Annotated C++ Reference Manual (Jan '94), section 12.4 contains the
following example:
int* p;
/ ...
p->int::~int();
But this syntax is not supported by Visual C++, even through a typeddef or
template type. The only workaround is to remove the explicit call to the
destructor.
STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed
at the beginning of this article. This bug was corrected in Visual C++
version 4.0.
REFERENCES
For more information, please see the following articles in the Microsoft
Knowledge Base:
129132 BUG: Can't Use Simple Type in Explicit Call of a Destructor
130547 BUG: C2300 on Explicit Destructor Call in Class Template
Modification Type: | Minor | Last Reviewed: | 7/5/2005 |
---|
Keywords: | kbbug kbCompiler kbCPPonly kbfix kbVC400fix KB130546 |
---|
|