try intersection of upper bounds as a suggestion

not each bound itself
while resolving constraint system
This commit is contained in:
Svetlana Isakova
2013-09-27 13:53:27 +04:00
parent 8a4afb9330
commit 65e2f47bc3
4 changed files with 57 additions and 3 deletions
@@ -0,0 +1,30 @@
package s
trait In<in T>
trait A
trait B
trait C: A, B
fun <T> foo(in1: In<T>, in2: In<T>): T = throw Exception("$in1 $in2")
fun test(inA: In<A>, inB: In<B>, inC: In<C>) {
<!TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS!>foo<!>(inA, inB)
val r = foo(inA, inC)
r: C
val c: C = foo(inA, inB)
use(c)
}
fun <T: C> bar(in1: In<T>): T = throw Exception("$in1")
fun test(inA: In<A>) {
val r = bar(inA)
r: C
}
fun use(vararg a: Any?) = a
@@ -0,0 +1,13 @@
fun <R : Any> unescape(value: Any): R? = throw Exception("$value")
fun <T: Any> foo(v: Any): T? = unescape(v)
//--------------
trait A
fun <R : A> unescapeA(value: Any): R? = throw Exception("$value")
fun <T: A> fooA(v: Any): T? = unescapeA(v)