interface I1 { } interface I2 { } operator fun I1.component1(): Int { return 1 } operator fun I2.component2(): String { return "" } fun test(x: I1) { when { x !is I2 -> return Unit } // COMPOSITE { val tmp0_container: I2 = x /*as I2 */ val c1: Int = tmp0_container /*as I1 */.component1() val c2: String = tmp0_container.component2() // } }