void f();
void f(int);
void f(int, int);
void f(double, double = 3.14);
f(5.6); // calls void f(double, double) and not f(int) or f(), for that matter. Why?
Я прочитал, что компилятор проверяет количество параметров перед проверкой типа параметров. Тогда почему не все функции, устраняющие различное количество параметров?Функция перегрузки разрешения
Параметры, для которых не были предоставлены аргументы (на сайте вызова) и которые имеют аргументы по умолчанию * игнорируются * для разрешения перегрузки [over.match.viable]/2. – dyp