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

ID: Q149965


The information in this article applies to:
  • Microsoft C/C++ Compiler (CL.EXE), used with:
    • Microsoft Visual C++ for Windows, versions 1.0, 1.5, 1.52
    • Microsoft Visual C++ 32-bit Edition, versions 2.0, 2.1, 2.2, 4.0, 4.1, 4.2


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
            } 

Additional query words: kbVC400bug

Keywords : kbCompiler kbCPPonly kbVC kbVC500fix
Version : :1.0,1.5,1.52,2.0,2.1,2.2,4.0,4.1,4.2
Platform : NT WINDOWS
Issue type : kbbug


Last Reviewed: February 2, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.