FIX: C2227 & C2653 on Explicit Destructor Call in TemplateLast reviewed: September 18, 1997Article ID: Q130546 |
The information in this article applies to:
SYMPTOMSCompiling 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 RESOLUTIONThe 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.
STATUSMicrosoft 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.
MORE INFORMATION
Sample Code to Demonstrate Problem
// Compile options needed: none template<class Item> class classX { public: void funcX(); Item* cpR; }; template<class Item> void classX<Item>::funcX() { cpR->Item::~Item(); }; template classX<int>;REFERENCES For more information, please see the following articles in the Microsoft Knowledge Base:
ARTICLE-ID: Q129132 TITLE : BUG: Can't Use Simple Type in Explicit Call of a Destructor ARTICLE-ID: Q130547 TITLE : BUG: C2300 on Explicit Destructor Call in Class Template |
Additional query words: 9.00 9.10 Intrinsic
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |