// Tests that using fulfillment in the trait solver means that we detect that a // method is impossible, leading to no ambiguity. //@ check-pass //@ revisions: current next //@ ignore-compare-mode-next-solver (explicit revisions) //@[next] compile-flags: -Znext-solver #[derive(Default)] struct W(A, B); trait Constrain { type Output; } impl Constrain for i32 { type Output = u32; } trait Impossible {} impl W where A: Constrain, B: Impossible { fn method(&self) {} } impl W { fn method(&self) {} } fn main() { let w: W = W::default(); w.method(); }