class A(val x: String, val y: String, val z: T) fun foo(a: A, block: (A) -> String): String = block(a) operator fun A<*>.component1() = x object B { operator fun A<*>.component2() = y } fun B.bar(): String { operator fun A.component3() = z val x = foo(A("O", "K", 123)) { (x, y, z) -> x + y + z.toString() } if (x != "OK123") return "fail 1: $x" return "OK" } fun box() = B.bar()