interface X interface Z interface A : X, Z interface B : X, Z fun interface IFoo where T : X, T : Z { fun accept(t: T) } fun sel(x: T, y: T) = x class G where T: X, T: Z { fun check(x: IFoo) {} } fun box(): String { val g = sel(G(), G()) // g: G g.check {} // (*) target SAM type: IFoo<{ X & Z }> (TODO: report a compile time error for this case) return "OK" }