При компиляции
void ambig( signed long) { }
void ambig(unsigned long) { }
int main(void) { ambig(-1); return 0; }
я получаю
error C2668: 'ambig' : ambiguous call to overloaded function
could be 'void ambig(unsigned long)'
or 'void ambig(long)'
while trying to match the argument list '(int)'
Я знаю, что могу «исправить» это, сказав -1L
вместо -1
, но почему / как именно это считается неоднозначным в первую очередь?