import kotlin.reflect.KProperty class Delegate(val data: T) { operator fun getValue(thisRef: Nothing?, prop: KProperty<*>): T = data } fun makeIntDelegate(t: Int): Delegate = Delegate(t) fun makeDelegate(t: TT): Delegate = Delegate(t) fun materialize(): M = null!! fun materialize2(): M2 = null!! fun id(v: Q): Q = v val x by makeIntDelegate(run { val x: String = materialize() materialize2() })