// RUN_PIPELINE_TILL: FRONTEND
// CHECK_TYPE

package a

import checkSubtype

fun <T> id(t: T): T = t

fun <T> either(t1: T, t2: T): T = t1

fun test() {
    val a: Float = id(2.0.toFloat())

    val b = id(2.0)
    checkSubtype<Double>(b)

    val c = either<Number>(1, 2.3)
    checkSubtype<Number>(c)

    val d = either(11, 2.3)
    checkSubtype<Any>(d)

    val e: Float = <!TYPE_MISMATCH, TYPE_MISMATCH!>id(1)<!>
}

/* GENERATED_FIR_TAGS: classDeclaration, funWithExtensionReceiver, functionDeclaration, functionalType, infix,
integerLiteral, intersectionType, localProperty, nullableType, propertyDeclaration, typeParameter, typeWithExtension */
