# 7.2.4 Binary operator overload resolution

**Visual Studio .NET 2003**

An operation of the form `x`

*op* `y`

, where *op* is an overloadable binary operator, `x`

is an expression of type `X`

, and `y`

is an expression of type `Y`

, is processed as follows:

- The set of candidate user-defined operators provided by
`X`

and`Y`

for the operation`operator`

*op*`(x,`

`y)`

is determined. The set consists of the union of the candidate operators provided by`X`

and the candidate operators provided by`Y`

, each determined using the rules of Section 7.2.5. If`X`

and`Y`

are the same type, or if`X`

and`Y`

are derived from a common base type, then shared candidate operators only occur in the combined set once. - If the set of candidate user-defined operators is not empty, then this becomes the set of candidate operators for the operation. Otherwise, the predefined binary
`operator`

*op*implementations become the set of candidate operators for the operation. The predefined implementations of a given operator are specified in the description of the operator (Section 7.7 through Section 7.13). - The overload resolution rules of Section 7.4.2 are applied to the set of candidate operators to select the best operator with respect to the argument list
`(x,`

`y)`

, and this operator becomes the result of the overload resolution process. If overload resolution fails to select a single best operator, a compile-time error occurs.

Show: