Por favor, explique esse comportamento em Kotlin:
data class A<T>(val p: T)
class B
fun f1(): A<Number> = A(B()) as A<Number>
fun f2(): A<Unit> = A(B()) as A<Unit>
fun main() {
println("f1: ${f1().p::class.simpleName}") // print "f1: B"
println("f2: ${f2().p::class.simpleName}") // print "f2: Unit"
}
Eu esperaria a saída "B" tanto no primeiro quanto no segundo caso.
Além disso, curiosamente, ele funciona corretamente para data class A<T>(val p: T?)
.
É algum tipo de otimização do compilador?