Ответ 1
Потому что, как ваши комментарии, 1
является литералом типа int
.
Для компилятора неявное преобразование int
в short int
равно как и неявное преобразование int
в double
(см. стандарт языка С++, §13.3).
Таким образом, поскольку компилятор не может решить перегрузки double
и short int
, он отказывается и выдает диагностику.
Обратите внимание, что значение параметра функции не имеет значения: просто тип.
(Было бы очень неприятно, если бы компилятор во время выполнения выбрал перегрузку short int
, если вызывающий аргумент был подходящим, и double
один в других экземплярах.)