// !LANGUAGE: +ContextReceivers
interface Context1
interface Context2 {
fun getContextElement(): A
}
class Context2Impl(val value: A) : Context2 {
override fun getContextElement(): A = value
}
context(Int, String)
class A {
context(Double)
constructor(int: Int) {}
}
context(Context1, c2@Context2)
class B {
override fun toString(): String = getContextElement()
}
context(Context2)
class C {
val a: A
get() = getContextElement()
}
context(Context1)
@Deprecated("Use `B` instead.")
class D
context(b@B, `fun`@A)
fun foo() = Unit
context(Context2>)
fun bar() = with (Context2Impl(getContextElement().a)) { C() }