13.2. Applicable Signatures

The applicability of signature declarations to invocations is defined as follows. The invocation context specifies a set of alternatives of argument transformations. For each transformation, check these steps:

  1. The argument transformation computes the actual argument expressions using the explicit argument expressions. How this is performed is specified by the argument transformation.

  2. If the number of parameters in the signature declaration does not equal the number of actual argument expressions, then the signature is not applicable for this alternative of argument transformations.

  3. Otherwise, if the type of each actual argument is commensurate with the corresponding parameter, then the signature is applicable for this alternative. Unless specified otherwise by the argument transformation, the following rules define if an argument of an invocation is commensurate with a parameter:

    • If the signature is a class predicate and argument and parameter are of reference type, the argument is commensurate with the parameter iff a casting conversion from the argument type to the parameter type exists.

    • Otherwise, the argument is commensurate with the parameter iff a method invocation conversion from the argument type to the parameter type exists.