gpeal
05/16/2018, 4:41 AMopen class ClassA<T> {
open operator fun invoke(): T? = null
}
class ClassB<T : Any>(private val value: T) : ClassA<T>() {
override operator fun invoke(): T = value
}
val foo: ClassA<String> = ClassB("123")
if (foo is ClassB) {
// This smart casts to String
println(foo.invoke().reversed())
// This doesn't and is still String?
// println(foo().reversed())
}