При компиляции
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
, но почему/как именно это считается двусмысленным в первую очередь?