> On May 18, 2016, at 12:54 PM, Matthew Johnson <[email protected]> wrote:
> 
> 
>> On May 16, 2016, at 4:06 PM, Joe Groff via swift-evolution 
>> <[email protected]> wrote:
>> 
>> Currently, we parse a type after 'as[?!]' and 'is'. This is mostly what 
>> you'd expect, but does lead to problems when an 'as' expression appears as 
>> part of a comparison:
>> 
>>      20 as Int64 < y as Int64 // error, '>' expected to close generic 
>> parameter list Int64<y>
>> 
>> Looking to the future, many people have also expressed interest in the 
>> ability to do dynamic type checks against metatype values, not only static 
>> types, as in:
>> 
>>      class Base {}
>>      class DerivedA {}
>>      class DerivedB {}
>> 
>>      var x: Base.Type = DerivedA
>> 
>>      DerivedA() as? x // succeeds
>>      DerivedB() as? x // fails
> 
> The dynamic check itself makes sense but it isn’t clear what type these 
> expressions should return?  It can’t be `DerivedA?` like it would in the 
> equivalent static expression as the type is not known statically:
> 
> DerivedA() as? DerivedA // succeeds with value Optional<DerivedA>.Some
> DerivedB() as? DerivedA // fails with value Optional<DerivedA>.None

Right, the static type of a cast like this would still have to be the upper 
bound type of the metatype value. (Unless we introduce some sort of 
path-dependent types to allow `x.Self` to be a type.)

-Joe
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to