During the step of function overload resolution, the compiler identifies and ranks the conversion that can apply to each argument in a function call to convert to the type of the corresponding parameter in each viable function.
possible minor converion in exact match
- Lvalue-to-rvalue converion
- Array to pointer conversion
- Function to pointer conversion
- Qualification conversion
below the exact match, it is the pomotion, and actually the rand of the conversion (inlcuding the exact match is as follow):
- Exact match
- Promotion (int -> float -> double)
- Standard Conversion (double -> float -> int)
- User defined conversion
why the rank is so important, it is because during the overload function selection, there are rules for better ranked conversion.
- The conversion applied to the arguments are no worse than the conversion necessary to call any other viable function.
- The conversion on some arguments are better than the conversions necesary for the ame arguments when calling the other viable functions.