> 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
