> On Dec 5, 2016, at 11:39 AM, Joe Groff <jgr...@apple.com> wrote: > >> On Dec 4, 2016, at 6:46 PM, Charles Srstka via swift-evolution >> <swift-evolution@swift.org> wrote: >> >> The following currently does not work: >> >> protocol P: class {} >> class C: P {} >> >> func foo<T>(t: T) where T: AnyObject { >> print("foo") >> } >> >> let p: P = C() >> >> foo(t: p) // error: cannot invoke 'foo' with an argument list of type '(t: >> P)' >> >> It seems to me that this ought to have been allowed, since P is declared as >> being a reference type and thus should have been able to satisfy the >> function’s requirements. >> >> Is this worthy of writing a language proposal, or would this be considered a >> bug that should be sent through the radar system instead? > > It's a limitation of the current implementation. `AnyObject` is taken as > meaning that a conforming type has a representation that consists of a single > refcounted pointer. Protocol existentials do not have a single-refcounted > representation since the witness table for the conformances must also be > carried around, therefore the protocol type does not conform to AnyObject's > representation requirement.
Is there any way to just say “This function takes any reference type” that will work? Charles
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution