How is it that Swift allows code like this:

struct Sneaky: StringLiteralConvertible {
        init(stringLiteral value: String) {}
        init(extendedGraphemeClusterLiteral value: String) {}
        init(unicodeScalarLiteral value: String) {}
}

func ~=(sneaky: Sneaky, string: String) -> Bool {
        return false
}

enum NormalEnum: String {
        case Super = "super"
        case Mario = "mario"
}

let value = NormalEnum(rawValue: "super”) // return nil!!!!

It hit completely by surprise today because of of a Regex library:

struct Regex: StringLiteralConvertible {
        init(stringLiteral value: String) {}
        init(extendedGraphemeClusterLiteral value: String) {}
        init(unicodeScalarLiteral value: String) {}

        //...
}

func ~=(regex: Regex, string: String) -> Bool {
        return regex.matches(string)
}

If I was not already a Swift enthusiast, this behaviour would have left me 
completely dumbfounded.
What can we do about it?

David.
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to