Can anyone explain why there's no compiler error when I use an inline function in a function call with the wrong inferred type, yet there's a compiler error when I explicitly mention the type?
interface Foo
class FooBar : Foo
inline fun <reified T: Foo> createFoo() : T {
return T::class.java.getConstructor().newInstance()
}
fun fooFun(foo: String) {}
fun main() {
val foo1 = createFoo<FooBar>() // all good
val foo2 = createFoo<String>() // compiler error
val foo3: String = createFoo() // compiler error
fooFun(createFoo()) // all good at compile time, fails at runtime: why? ¯\_(ツ)_/¯
}
I would expect that calling fooFun(createFoo())
should also result in a compiler error.