//@ revisions: current next //@[next] compile-flags: -Znext-solver //@ ignore-compare-mode-next-solver (explicit revisions) //@[current] check-pass //@[current] known-bug: #57893 // Should fail. Because we see an impl that uses a certain associated type, we // type-check assuming that impl is used. However, this conflicts with the // "implicit impl" that we get for trait objects, violating coherence. trait Object { type Output; } impl Object for T { type Output = U; } fn foo(x: >::Output) -> U { x } #[allow(dead_code)] fn transmute(x: T) -> U { foo::, U>(x) //[next]~^ ERROR type annotations needed: cannot normalize ` as Object>::Output` } fn main() {}