|  | // issue#143560 | 
|  |  | 
|  | trait T { | 
|  | type Target; | 
|  | } | 
|  |  | 
|  | trait Foo { | 
|  | fn foo() -> impl T<Target = impl T<Target = impl Sized>>; | 
|  | fn foo() -> impl Sized; | 
|  | //~^ ERROR: the name `foo` is defined multiple times | 
|  | } | 
|  |  | 
|  | trait Bar { | 
|  | fn foo() -> impl T<Target = impl T<Target = impl Sized>>; | 
|  | fn foo() -> impl T<Target = impl T<Target = impl Sized>>; | 
|  | //~^ ERROR: the name `foo` is defined multiple times | 
|  | } | 
|  |  | 
|  | struct S<T> { | 
|  | a: T | 
|  | } | 
|  |  | 
|  | trait Baz { | 
|  | fn foo() -> S<impl T<Target = S<S<impl Sized>>>>; | 
|  | fn foo() -> S<impl T<Target = S<S<impl Sized>>>>; | 
|  | //~^ ERROR: the name `foo` is defined multiple times | 
|  | } | 
|  |  | 
|  | struct S1<T1, T2> { | 
|  | a: T1, | 
|  | b: T2 | 
|  | } | 
|  |  | 
|  | trait Qux { | 
|  | fn foo() -> S1< | 
|  | impl T<Target = impl T<Target = impl Sized>>, | 
|  | impl T<Target = impl T<Target = S<impl Sized>>> | 
|  | >; | 
|  | fn foo() -> S1< | 
|  | impl T<Target = impl T<Target = impl Sized>>, | 
|  | impl T<Target = impl T<Target = S<impl Sized>>> | 
|  | >; | 
|  | //~^^^^ ERROR: the name `foo` is defined multiple times | 
|  | } | 
|  |  | 
|  | trait T0<T> { | 
|  | type Target; | 
|  | } | 
|  | trait T1<T> {} | 
|  |  | 
|  | trait X { | 
|  | fn a() -> impl T0<(), Target = impl T1<()>>; | 
|  | fn a() -> impl T0<(), Target = impl T1<()>>; | 
|  | //~^ ERROR the name `a` is defined multiple times | 
|  | fn a() -> impl T0<(), Target = impl T1<()>>; | 
|  | //~^ ERROR the name `a` is defined multiple times | 
|  | } | 
|  |  | 
|  | fn main() {} |