I brought this up on Swift Dev and was told to check on Swift Evolution to see if a proposal is needed.
Currently, the following code produces a compiler error: func foo(_ x: Int, _ y: Int) -> Int { return x + y } extension Int { func foo() -> Int { return foo(self, self) // Error here } } Notice that the two functions named “foo” have entirely different signatures. The global function takes 2 arguments, while the member function takes 0 (or 1, if referenced as “Int.foo”). There is exactly one function “foo” which takes 2 arguments, so a call to “foo” with 2 arguments, like the one shown, should be unambiguous. However, instead of calling the function with matching signature, there is instead a compiler error. This is already documented as SR–2450 <https://bugs.swift.org/browse/SR-2450>, with an example from the standard library (global 2-argument “min” vs. 0-argument “Collection.min”). It appears that in any situation where a global function and a member function share the same base name, but only the global function’s signature matches the call site, the result is a compiler error. I suggest that, when there is exactly one function available with the proper name and signature, instead of a compiler error the matching function should be called. Do we need a Swift Evolution proposal for this change? Nevin
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution