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