class Point() { } class G() {} fun f(expression : T) : G = G() fun foo() : G { val p = Point() return f(p) } class Out() {} fun fout(expression : T) : Out<out T> = Out() fun fooout() : Out { val p = Point(); return fout(p); }