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
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users