class A { operator fun component1() = 1 operator fun component2() = "" } fun test() { val (_, _) = A() val (_, _, _) = A() val (_: Int, _: String) = A() val (_: String, _) = A() val f: (A) -> Int = { (_, _) -> 1 } val g: (A) -> Int = { (_, _, _) -> 2 } val h: (A) -> Int = { (_: String, _) -> 3} }