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