Overload resolution is a mechanism for selecting the best
function to call given a list of expressions that are to be the
arguments of the call and a set of
be called based on the context of the call.
criteria for the best function are the number of arguments, how
well the arguments match the parameter-type-list of the
how well (for non-static member functions) the object
matches the implicit object parameter,
and certain other properties of the candidate function.