//KT-3772 Invoke and overload resolution ambiguity open class A { fun invoke(f: A.() -> Unit) = 1 } class B { operator fun invoke(f: B.() -> Unit) = 2 } open class C val C.attr: A get() = A() open class D: C() val D.attr: B get() = B() fun box(): String { val d = D() return if (d.attr {} == 2) "OK" else "fail" }