Article ID: 148255
Article Last Modified on 7/5/2005
APPLIES TO
- Microsoft Visual C++ 4.0 Professional Edition
- Microsoft Visual C++ 4.1 Subscription
- Microsoft Visual C++ 4.2 Professional Edition
- Microsoft Visual C++ 4.2 Enterprise Edition
- Microsoft Visual C++ 5.0 Learning Edition
- Microsoft Visual C++ 5.0 Learning Edition
This article was previously published under Q148255
SYMPTOMS
When an argument in a function call is passed by value and is cast to a base class from a derived class that is also a friend of the base class, the compiler generates this error:
This occurs only when C++ exception handling is enabled (/GX) and the base class defines a destructor.
RESOLUTION
There are several workarounds:
- Pass the class by reference. -or-
- Remove the cast. It is unnecessary. -or-
- Do not use the /GX compiler option if exception handling isn't required.
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 5.0.
MORE INFORMATION
Sample Code to Reproduce Problem
/* Compile options needed: /GX */ class Cbase { friend class Cfriend; public: ~Cbase( void ) {} }; class Cfriend : public Cbase {}; void f(Cbase z){} // Workaround 1,pass by reference instead of by value //void f(Cbase& z) {} void main() { Cfriend P; // INTERNAL COMPILER ERROR on the following line f((Cbase)P); // Workaround 2, do not use a cast. // f(P); };
Additional query words: 10.00 10.10 10.20 utilities
Keywords: kbbug kbfix kbprogramming kbcpponly kbcompiler KB148255