[swift-users] Overload Resolution of Binary Operators

Toni Suter tonisuter at me.com
Mon Nov 14 16:05:46 CST 2016


Hi,

I would have expected that the following code reports an error, because
of ambiguous function overloads:

infix operator ***: MultiplicationPrecedence
infix operator +++: AdditionPrecedence

func ***(x: Int, y: Int) -> String {
	print("f1")
	return ""
}

func ***(x: Int, y: Int) -> Int {
	print("f2")
	return 0
}

func +++(x: String, y: Int) -> Int {
	print("f3")
	return 0
}

func +++(x: Int, y: Int) -> Int {
	print("f4")
	return 0
}

let result = 0 *** 4 +++ 0		// prints f2 and f4


As far as I can tell, there are two possible overload resolutions: f1 + f3 or f2 + f4.
I thought that these two solutions get an "equivalent score" and therefore there would
be a compile error. However, that's not the case. Instead, the type checker picks
f2 and f4.

So, I guess my question is, whether there is some rule, that prefers
operators, which have the same argument types and the same return type
or whether this is simply a bug.

Thanks and best regards,
Toni
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20161114/2e1a4c17/attachment.html>


More information about the swift-users mailing list