1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
// 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>(A, B);
trait Constrain {
type Output;
}
impl Constrain for i32 {
type Output = u32;
}
trait Impossible {}
impl<A, B> W<A, B> where A: Constrain<Output = B>, B: Impossible {
fn method(&self) {}
}
impl W<i32, u32> {
fn method(&self) {}
}
fn main() {
let w: W<i32, _> = W::default();
w.method();
}
|