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?
I read that the compiler checks the number of parameters before checking the type of parameters. Then why aren't all the functions having different number of parameters getting eliminated?