package test interface Z { fun a() : T } inline fun test(crossinline z: () -> String) = object : Z> { val p: Z = object : Z { val p2 = z() override fun a() = p2 } override fun a() = p }