trait In trait Out trait Inv class Delegate { fun get(t: Any, p: PropertyMetadata): T = null!! fun set(t: Any, p: PropertyMetadata, value: T) {} } fun getT(): T = null!! abstract class Test { abstract val type1: I abstract val type2: O abstract val type3: P abstract val type4: In abstract val type5: In<)!>O> val implicitType1 = getT() val implicitType2 = getT() val implicitType3 = getT

() val implicitType4 = getT>() )!>val implicitType5 = getT>() val delegateType1 by Delegate() val delegateType2 by Delegate() val delegateType3 by Delegate

() val delegateType4 by Delegate>() )!>val delegateType5 by Delegate>() abstract val I.receiver1: Int abstract val O.receiver2: Int abstract val P.receiver3: Int abstract val In<)!>I>.receiver4: Int abstract val In.receiver5: Int val typeParameter1 = 8 val O> typeParameter2 = 13 val typeParameter3 = 21 val )!>I>> typeParameter4 = 34 val > typeParameter5 = 55 val typeParameter6 where X : I = 1 val typeParameter7 where X : O = 1 val typeParameter8 where X : P = 2 val typeParameter9 where X : In<)!>I> = 3 val typeParameter0 where X : In = 5 }