// !LANGUAGE: +NewInference // !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER interface Bound class Cls : Bound class Inv(val prop: T) class In(param: I) class InB(param: I) class Out(val prop: O) fun id(arg: K): K = arg fun makeInv(arg: W): Inv = TODO() fun wrapOut(arg: O): Inv = TODO() fun wrapIn(arg: I): Inv = TODO() fun test1(cls: Cls) { id( ")!>Inv(cls) ) } fun test2(cls: Cls) { id>( ")!>Inv(cls) ) } fun test3(cls: Cls) { id>( ")!>Out(cls) ) } fun test4(cls: Cls) { id( ")!>Out(cls) ) } fun test5(cls: Cls) { id( ")!>In(cls) ) } fun test6(cls: Cls) { id>( ")!>In(cls) ) } fun test7(cls: Cls) { id( ")!>wrapOut(cls) ) } fun test8(cls: Cls) { id( ")!>wrapIn(cls) ) } fun test9(cls: Cls) { id( ")!>InB(cls) ) }