See also separate topic on Overload Resolution
Ambiguities can occur when one type can be implicitly converted into more than one type and there is no matching function for that specific type.
For example:
void foo(double, double);
void foo(long, long);
//Call foo with 2 ints
foo(1, 2); //Function call is ambiguous - int can be converted into a double/long at the same time