¿Es posible devolver el mismo tipo que el parámetro de tipo en la instrucción when

Por ejemplo:

fun <T> f(a: T): T =
    when (a) {
        a is Int -> 0  // if T is Int, then return Int
        a is String -> ""  // if T is String, then return String
        else -> throw RuntimeException()  // Otherwise, throw an exception so that the return type does not matter.
    }

Da errores de compilación:

Error:(3, 20) The integer literal does not conform to the expected type T
Error:(4, 23) Type mismatch: inferred type is String but T was expected

Respuestas a la pregunta(2)

Su respuesta a la pregunta