import kotlin.reflect.KProperty class Delegate(var inner: T) { operator fun getValue(t: Any?, p: KProperty<*>): T = inner operator fun setValue(t: Any?, p: KProperty<*>, i: T) { inner = i } } class A { inner class B { var prop: Int by Delegate(1) } } fun box(): String { val c = A().B() if(c.prop != 1) return "fail get" c.prop = 2 if (c.prop != 2) return "fail set" return "OK" }