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 : In).`In.f:T->Unit`f("1"); (return : In).`In.f:Int->Int`f("1") (return : In<*>).`In.f:Int->Int`f("1"); In().`In.f:Int->Int`f(1); (return : In).`In.f:Int->Int`f(1); (return : In).`In.f:Int->Int`f(1) (return : In).`!`f1(1) (return : In<*>).`In.f:Int->Int`f(1); Out().`Out.f(a)`f(1) (return : Out).`Out.f(a)`f(1) (return : Out).`Out.f(a)`f(1) (return : Out<*>).`Out.f(a)`f(1) Out().`Out.f`f() (return : Out).`Out.f`f() (return : Out).`Out.f`f() (return : Out<*>).`Out.f`f() Inv().`Inv.f`f(1) (return : Inv).`Inv.f`f(1) (return : Inv).`!`f(1) (return : Inv<*>).`!`f(1) Inv().`Inv.inf`inf(1) (return : Inv).`Inv.inf`inf(1) (return : Inv).`!`inf(1) (return : Inv<*>).`!`inf(1) Inv().`Inv.outf`outf() ((return : Inv).`Inv.outf`outf())`:kotlin::Any` (return : Inv).`Inv.outf`outf() (return : Inv<*>).`Inv.outf`outf() Inv().`Inv.outf`outf(1) }