[swift-users] Swift's method dispatch
Jens Persson
jens at bitcycle.com
Fri Dec 8 08:25:38 CST 2017
Hi all!
Can someone please explain the rationale behind the last line printing
"T is unknown"
rather than (what I would expect):
"T is Int"
in the following program?
protocol P {
associatedtype T
func f() // *
}
extension P {
func f() { print("T is unknown") }
}
extension P where T == Int {
func f() { print("T is Int") }
}
struct X<T> : P {}
struct Y<U> where U: P, U.T == Int {
// NOTE: The compiler/type-checker knows that U.T == Int here so ...
typealias T = U.T
var a: U
func g() { a.f() } // ... how/why could this print anything but "T is
Int"?
}
let x = X<Int>()
x.f() // Prints "T is Int", no matter if * is commented out or not.
let y = Y(a: X<Int>())
y.g() // Prints "T is unknown" unless * is commented out. Why?
IMHO this looks like the compiler simply ignores that struct Y<U> has the
constraint U.T == Int.
How else to explain this behavior?
/Jens
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20171208/dfb8379c/attachment.html>
More information about the swift-users
mailing list