Article: Q128213
Product(s): Microsoft C Compiler
Version(s): 2.0,2.1,2.2
Operating System(s):
Keyword(s): kbCompiler kbCPPonly kbVCkbbuglist kbfixlist
Last Modified: 12-DEC-2001
-------------------------------------------------------------------------------
The information in this article applies to:
- Microsoft Visual C++, 32-bit Editions, versions 2.0, 2.1, 2.2
-------------------------------------------------------------------------------
SYMPTOMS
========
Defining a static member function together with a user-defined class destructor
in a class that is used only as a return type of a member function in another
class may cause the Microsoft C++ compiler version 9.0 to generate the following
compiler error:
fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'd:\b_bld\c2.m2\p2\main.c', line 374)
Please choose the Technical Support command on the Visual C++ Help menu, or
open the Technical Support help file for more information
The sample code in the More Information section below demonstrates this problem.
RESOLUTION
==========
To work around the problem, use one of the following suggestions:
- Instead of using the chain notation to call the static member function, break
the statement into two statements. For example,
b.GetClassA().problem(10); // error
a = b.GetClassA(); // work-around
a.problem(10);
where a is an instance of class A, b is an instance of class B based on the
sample code below.
-or-
- Define the static member function as a non-static member function.
-or-
- Instead of returning object A for function GetClassA() in the following
sample code, return a reference to A.
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 Microsoft Visual C++,
32-bit Edition, version 4.0.
MORE INFORMATION
================
The sample code below can be used to generate the C1001 error.
Sample Code
-----------
/* Compile options needed: none
*/
class A
{
public:
~A() {}
static void problem(int a) {}
};
class B
{
public:
A GetClassA();
};
void main()
{
B b;
b.GetClassA().problem(10);
}
Additional query words: 2.00 2.10 2.20 9.00 9.10
======================================================================
Keywords : kbCompiler kbCPPonly kbVC kbbuglist kbfixlist
Technology : kbVCsearch kbAudDeveloper kbVC220 kbVC200 kbVC210 kbVC32bitSearch
Version : :2.0,2.1,2.2
Issue type : kbbug
Solution Type : kbfix
=============================================================================