Microsoft KB Archive/148255

= FIX: C1001 on Cast to Base from Derived Friend Class =

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:

fatal error C1001: INTERNAL COMPILER ERROR

(compiler file '\school.tp3\test\c10\src\P2\386\codegen.c', line 359)

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.



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

-

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

© Microsoft Corporation. All rights reserved.