// check-pass // 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) } fn main() {}