FIX: C2668 in Overloaded Function When enum Is Promoted to int (149965)



The information in this article applies to:

  • Microsoft Visual C++ 1.0
  • Microsoft Visual C++ 1.5
  • Microsoft Visual C++ 1.52
  • Microsoft Visual C++, 32-bit Learning Edition 4.0
  • Microsoft Visual C++, 32-bit Learning Edition 4.2
  • Microsoft Visual C++, 32-bit Enterprise Edition 4.2
  • Microsoft Visual C++, 32-bit Professional Edition 2.0
  • Microsoft Visual C++, 32-bit Professional Edition 2.1
  • Microsoft Visual C++, 32-bit Professional Edition 2.2
  • Microsoft Visual C++, 32-bit Professional Edition 4.0
  • Microsoft Visual C++, 32-bit Professional Edition 4.1
  • Microsoft Visual C++, 32-bit Professional Edition 4.2

This article was previously published under Q149965

SYMPTOMS

When a function is overloaded to take an int parameter in one instance and an unsigned int in another, the following error results if a call to the function is made with an enumerated type:
C2668 error: 'func' : ambiguous call to overloaded function (new behavior; please see help)

RESOLUTION

  • Use a cast when calling the function, such as func((unsigned)y). -or-

  • Overload the function to take the enumerated type, such as:
       func(enum A);
       func(enum E);

STATUS

Microsoft has confirmed this to be 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 Demonstrate Problem

   // Compile option needed: none

   enum A{eA = 0, eB};
   enum E{e = -1};

   void func(int a);
   void func(unsigned int a);

   void main(){
              A y = eA;
              E e1 = e;
              int m = 2;

              func(m);        // calls func(int)
              func(y);        // C2668 error
              func(e1);       // C2668 error
            }
				

Modification Type:MinorLast Reviewed:7/5/2005
Keywords:kbbug kbCompiler kbCPPonly kbfix kbVC500fix KB149965