| //@ compile-flags: -Znext-solver |
| //@ check-pass |
| |
| // Exercises the ambiguity that comes from replacing the associated types within the bounds |
| // that are required for a `impl Trait for dyn Trait` built-in object impl to hold. |
| |
| trait Sup<T> { |
| type Assoc; |
| } |
| |
| trait Foo<A, B>: Sup<A, Assoc = A> + Sup<B, Assoc = B> { |
| type Other: Bar<<Self as Sup<A>>::Assoc>; |
| } |
| |
| trait Bar<T> {} |
| impl Bar<i32> for () {} |
| |
| fn foo<A, B>(x: &(impl Foo<A, B> + ?Sized)) {} |
| |
| fn main() { |
| let x: &dyn Foo<_, _, Other = ()> = todo!(); |
| foo(x); |
| let y: &dyn Foo<i32, u32, Other = ()> = x; |
| } |