a073f29006
while comparing overloaded generic functions for specificity.
56 lines
1.5 KiB
Plaintext
Vendored
56 lines
1.5 KiB
Plaintext
Vendored
class In<in T>() {
|
|
~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 T>() {
|
|
~Out.f~fun f() : T {}
|
|
~Out.f(a)~fun f(a : Int) : Int {a}
|
|
}
|
|
|
|
class Inv<T>() {
|
|
~Inv.f~fun f(t : T) : T {t}
|
|
~Inv.inf~fun inf(t : T) : Unit {}
|
|
~Inv.outf~fun outf() : T {}
|
|
}
|
|
|
|
fun testInOut() {
|
|
In<String>().`In.f:T->Unit`f("1");
|
|
(return as In<in String>).`In.f:T->Unit`f("1");
|
|
(return as In<out String>).`!null`f("1")
|
|
(return as In<*>).`!null`f("1");
|
|
|
|
In<String>().`In.f:Int->Int`f(1);
|
|
(return as In<in String>).`In.f:Int->Int`f(1);
|
|
(return as In<out String>).`In.f:Int->Int`f(1)
|
|
(return as In<out String>).`In.f1`f1(1)
|
|
(return as In<*>).`In.f:Int->Int`f(1);
|
|
|
|
Out<Int>().`Out.f(a)`f(1)
|
|
(return as Out<out Int>).`Out.f(a)`f(1)
|
|
(return as Out<in Int>).`Out.f(a)`f(1)
|
|
(return as Out<*>).`Out.f(a)`f(1)
|
|
|
|
Out<Int>().`Out.f`f()
|
|
(return as Out<out Int>).`Out.f`f()
|
|
(return as Out<in Int>).`Out.f`f()
|
|
(return as Out<*>).`Out.f`f()
|
|
|
|
Inv<Int>().`Inv.f`f(1)
|
|
(return as Inv<in Int>).`Inv.f`f(1)
|
|
(return as Inv<out Int>).`Inv.f`f(1)
|
|
(return as Inv<*>).`Inv.f`f(1)
|
|
|
|
Inv<Int>().`Inv.inf`inf(1)
|
|
(return as Inv<in Int>).`Inv.inf`inf(1)
|
|
(return as Inv<out Int>).`Inv.inf`inf(1)
|
|
(return as Inv<*>).`Inv.inf`inf(1)
|
|
|
|
Inv<Int>().`Inv.outf`outf()
|
|
((return as Inv<in Int>).`Inv.outf`outf())`:kotlin::Any`
|
|
(return as Inv<out Int>).`Inv.outf`outf()
|
|
(return as Inv<*>).`Inv.outf`outf()
|
|
|
|
Inv<Int>().`Inv.outf`outf(1)
|
|
} |