FIX: C1001 on Cast to Base from Derived Friend Class

ID: Q148255


The information in this article applies to:
  • Microsoft C/C++ Compiler (CL.EXE), included with:
    • Microsoft Visual C++ 32-bit Edition, versions 4.0, 4.1, 4.2


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.


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 : kbprg kbtool kbCompiler kbCPPonly kbVC
Version : :4.0,4.1,4.2
Platform : NT WINDOWS
Issue type : kbbug


Last Reviewed: January 31, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.