Commits

Jordan Rose committed 003821a9566
Value-to-optional conversions are only subtypes for class references. let x: Int? = 4 as Int // okay let f: (Int) -> Void = { (x: Int?) -> Void in println(x) } // error! As part of this, remove an invalid "protection" of value-to-optional conversions that involve T? -> T??. Unfortunately, this results in an ambiguity in the following code: var z: Int? z = z ?? 42 Both of our overloads for ?? here require one value-to-optional conversion, and the overload preference isn't conclusive. (Turns out (T?, T) and (U?, U?) can be unified as T=U or as T=U?.) The best thing to do would be to take our solved T=Int binding into account, but the type checker isn't set up to do that at the moment. After talking to JoeP, I ended up just hardcoding a preference against the (T?, T?) -> T? overload of ??. This is only acceptable because both overloads have the same result, and I'll be filing another Radar to remove this hack in the future. Part of rdar://problem/19600325 Swift SVN r25045