Я не понимаю, как компилятор выбирает лучших кандидатов. Например, пусть у нас есть следующий код:
int function(double, int, int){...}
int function(int, double, double){...}
Если второй функции нужно преобразовать две переменные, а первой — только одну переменную, почему первая не выбрана? Почему неоднозначная ситуация?