//@ revisions: current next //@ ignore-compare-mode-next-solver (explicit revisions) //@[next] compile-flags: -Znext-solver //@[next] check-pass trait MyFn { type Output; } trait Callback: MyFn { type Ret; } impl> Callback for F { type Ret = F::Output; } struct Thing; trait Trait {} impl Trait for Thing {} trait ChannelSender { type CallbackArg; fn autobatch(self) -> impl Trait where F: Callback; //[current]~^ ERROR the trait bound `F: Callback` is not satisfied } struct Sender; impl ChannelSender for Sender { type CallbackArg = i32; fn autobatch(self) -> impl Trait //[current]~^ ERROR the trait bound `F: MyFn` is not satisfied //[current]~| ERROR the trait bound `F: MyFn` is not satisfied //[current]~| ERROR the trait bound `F: MyFn` is not satisfied //[current]~| ERROR the trait bound `F: MyFn` is not satisfied //[current]~| ERROR the trait bound `F: MyFn` is not satisfied where F: Callback, //[current]~^ ERROR the trait bound `F: MyFn` is not satisfied { Thing } } fn main() {}