try intersection of upper bounds as a suggestion
not each bound itself while resolving constraint system
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user