I suspect a compiler bug since A is a P. The equivalent in Java works: interface P {} class X implements P {} <A extends P> void foo(A x) {} void bar() { final P x = new X(); foo(x); }
-- Howard. > On 23 Dec 2016, at 3:19 am, Rien via swift-users <swift-users@swift.org> > wrote: > > IMO the error message says it all: > > Playground execution failed: error: MyPlayground8.playground:9:5: error: > cannot invoke 'foo' with an argument list of type '(P)' > foo(x) > ^ > > MyPlayground8.playground:9:5: note: expected an argument list of type '(A)' > foo(x) > ^ > > I.e. you are passing in a protocol while the function is specified for a type. > Said other way: On which data do you expect the protocol to operate? > > Regards, > Rien > > Site: http://balancingrock.nl > Blog: http://swiftrien.blogspot.com > Github: http://github.com/Swiftrien > Project: http://swiftfire.nl > > > > >> On 22 Dec 2016, at 17:05, Mikhail Seriukov via swift-users >> <swift-users@swift.org> wrote: >> >> Hello community! I' wondering if somebody can explain this to me. >> Please take look at the snippet. >> >> protocol P {} >> struct X:P {} >> >> func foo<A:P>(_ x:A) {} >> >> func bar() { >> //let x = X() // this compiles >> let x = X() as P // this does not compile. Why? >> foo(x) >> } >> >> I expect the both cases to work though. But only first works? And I do not >> understand why. >> My coworkers said that it is a compiler bug, but I'm not shure it is. >> Thanks for the help. >> _______________________________________________ >> swift-users mailing list >> swift-users@swift.org >> https://lists.swift.org/mailman/listinfo/swift-users > > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users