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()
  // }
}
