// !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() }