// compile-flags: -Znext-solver // When we're solving `::Assoc = i32`, we actually first solve // `::Assoc = ?1t`, then unify `?1t` with `i32`. That goal // with the inference variable is ambiguous when there are >1 param-env // candidates. // We don't unify the RHS of a projection goal eagerly when solving, both // for caching reasons and partly to make sure that we don't make the new // trait solver smarter than it should be. // This is (as far as I can tell) a forwards-compatible decision, but if you // make this test go from fail to pass, be sure you understand the implications! trait Foo { type Assoc; } trait Bar {} impl Bar for T where T: Foo {} fn needs_bar() {} fn foo + Foo>() { needs_bar::(); //~^ ERROR type annotations needed: cannot satisfy `T: Bar` } fn main() {}