I recall seeing a request on the -evolution list for something like `T := X` to indicate it could be X itself or anything inheriting / implementing it, so it’s certainly known behavior, if not desired. IMO it’s a bug and `:` should be fixed to include the root type, whether or not that requires a discussion on -evolution.
> On Dec 22, 2016, at 2:17 PM, Howard Lovatt via swift-users > <swift-users@swift.org> wrote: > > 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 > <mailto: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 <http://balancingrock.nl/> >> Blog: http://swiftrien.blogspot.com <http://swiftrien.blogspot.com/> >> Github: http://github.com/Swiftrien <http://github.com/Swiftrien> >> Project: http://swiftfire.nl <http://swiftfire.nl/> >> >> >> >> >>> On 22 Dec 2016, at 17:05, Mikhail Seriukov via swift-users >>> <swift-users@swift.org <mailto: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 <mailto:swift-users@swift.org> >>> https://lists.swift.org/mailman/listinfo/swift-users >>> <https://lists.swift.org/mailman/listinfo/swift-users> >> >> _______________________________________________ >> swift-users mailing list >> swift-users@swift.org <mailto:swift-users@swift.org> >> https://lists.swift.org/mailman/listinfo/swift-users >> <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