> 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

Reply via email to