BUG: No Compiler Error for Ambiguous C++ Conversion

ID: Q116487


The information in this article applies to:
  • The C/C++ Compiler (CL.EXE), used with:
    • Microsoft C/C++ for MS-DOS
    • Microsoft Visual C++ for Windows, 16-bit edition, versions 1.0, 1.5
    • Microsoft Visual C++, 32-bit Editions, versions 1.0, 2.0, 4.0, 4.1, 4.2, 5.0, 6.0


SYMPTOMS

Class A has a member function that converts an instance of class B to an instance of class A. Class B also has a member function that converts an instance of class B to an instance of class A. Therefore, when you assign an instance of class B to an instance of class A, the compiler could use both conversion methods, resulting in an ambiguity. However, the C/C++ compiler does not generate an error message in this situation, as demonstrated by the sample code in the "MORE INFORMATION" section, below.


STATUS

Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article.


MORE INFORMATION

You can use the following sample code to reproduce this problem:

Sample Code


/* Compile options needed: none
*/ 

#include <iostream.h>

class B;

class A
{
public:
    // This is the function the compiler
    // chooses to call.
     A(B&) { cout << "called A::A(B&)" << endl; }
};

class B
{
public:
     operator A()  // This function does not get called.
     {
          B b;
          cout << "called operator B::A()" << endl;
          return b;
     }
};

void main()
{
        B b;
        A a = b; // A(b) or b.operator A()?
                 // The compiler should issue an
                 // error here but instead chooses
                 // to call A::A(B&).

        cout << "failed: should not compile- see ARM 12.3.2" << endl;
}
 


REFERENCES

"The Annotated C++ Reference Manual" (ARM), Ellis and Stroustrup, Section 12.3.2, "Conversion Functions."

Additional query words: kbVC400bug 8.00 8.00c 9.00

Keywords : kbCompiler kbCPPonly kbVC kbVC100bug kbVC151bug kbVC200bug kbVC400bug kbVC410bug kbVC420bug kbVC500bug kbVC600bug
Version : winnt:1.0,2.0,4.0,4.1,4.2,5.0,6.0
Platform : winnt
Issue type : kbbug


Last Reviewed: April 15, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.