class In() { ~In.f:T->Unit~fun f(t : T) : Unit {} ~In.f:Int->Int~fun f(t : Int) : Int {} ~In.f1~fun f1(t : T) : Unit {} } class Out() { ~Out.f~fun f() : T {} ~Out.f(a)~fun f(a : Int) : Int {a} } class Inv() { ~Inv.f~fun f(t : T) : T {t} ~Inv.inf~fun inf(t : T) : Unit {} ~Inv.outf~fun outf() : T {} } fun testInOut() { In().`In.f:T->Unit`f("1"); (return as In).`In.f:T->Unit`f("1"); (return as In).`!null`f("1") (return as In<*>).`!null`f("1"); In().`In.f:Int->Int`f(1); (return as In).`In.f:Int->Int`f(1); (return as In).`In.f:Int->Int`f(1) (return as In).`In.f1`f1(1) (return as In<*>).`In.f:Int->Int`f(1); Out().`Out.f(a)`f(1) (return as Out).`Out.f(a)`f(1) (return as Out).`Out.f(a)`f(1) (return as Out<*>).`Out.f(a)`f(1) Out().`Out.f`f() (return as Out).`Out.f`f() (return as Out).`Out.f`f() (return as Out<*>).`Out.f`f() Inv().`Inv.f`f(1) (return as Inv).`Inv.f`f(1) (return as Inv).`Inv.f`f(1) (return as Inv<*>).`Inv.f`f(1) Inv().`Inv.inf`inf(1) (return as Inv).`Inv.inf`inf(1) (return as Inv).`Inv.inf`inf(1) (return as Inv<*>).`Inv.inf`inf(1) Inv().`Inv.outf`outf() ((return as Inv).`Inv.outf`outf())`:kotlin::Any` (return as Inv).`Inv.outf`outf() (return as Inv<*>).`Inv.outf`outf() Inv().`Inv.outf`outf(1) }