visual c++ - why is overload with unsigned __int64 and __int64 ambiguous -
visual c++ - why is overload with unsigned __int64 and __int64 ambiguous -
using vs2008, why ok (not allowed utilize 2010).
void assert(int exp, int actual) {if (exp!=actual) printf("assert failed\n");} void assert(unsigned int exp, unsigned int actual) {if (exp!=actual) printf("assert failed\n");} but ambiguous.
void assert(__int64 exp, __int64 actual) {if (exp!=actual) printf("assert failed\n");} void assert(unsigned __int64 exp, unsigned __int64 actual) {if (exp!=actual) printf("assert failed\n");} sample error text
d:\my documents\visual studio 2008\projects\classtest\classtest\classtest.cpp(31) : error c2668: 'assert' : ambiguous phone call overloaded function d:\my documents\visual studio 2008\projects\classtest\classtest\classtest.cpp(12): 'void assert(unsigned __int64,unsigned __int64)' d:\my documents\visual studio 2008\projects\classtest\classtest\classtest.cpp(10): or 'void assert(__int64,__int64)' while trying match argument list '(int, int)' it gets ambiguous regards 'unsigned' overload. having , "int" version , "__int64" version not ambiguous.
your code using int , int parameters. in first case has exact match. in sec case not, , treats int->uint64 , int->int64 as valid conversions doesn't know 1 pick.
visual-c++ overloading unsigned-long-long-int
Comments
Post a Comment