I'm pretty sure solutions like the one you proposed are impossible, unfortunately :(. The compiler has to choose the static override at compile time, but it can't tell until runtime whether the type conforms to `Equatable` or not (because of retroactive conformance).
It's also not possible to use the as or is dynamic casting machinery to work with `Equatable`, because of the use of the `Self` type in its requirements. A feature that the community has expressed interest in, "generalized existentials", may allow you to implement a function that does what you want. Best, Austin > On Jul 3, 2017, at 5:00 PM, David Baraff via swift-users > <swift-users@swift.org> wrote: > > I’m searching for the simplest way to write a function > func maybeEqual<T>(_ lhs:T, _rhs:T) -> Bool > > where it returns lhs == rhs if T is equatable, and false, otherwise. > I tried > > func maybeEqual<T>(_ lhs:T, _rhs:T) -> Bool { > return false > } > > func maybeEqual<T:Equatable>(_ lhs:T, _ rhs:T) -> Bool { > return lhs == rhs > } > > but that doesn’t work. Is there a way to express a type not matching > something? > Alternately, how can I write this? > > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users