| An associated item constraint was written in an unexpected context. |
| |
| Erroneous code example: |
| |
| ```compile_fail,E0229 |
| pub trait Foo { |
| type A; |
| fn boo(&self) -> <Self as Foo>::A; |
| } |
| |
| struct Bar; |
| |
| impl Foo for isize { |
| type A = usize; |
| fn boo(&self) -> usize { 42 } |
| } |
| |
| fn baz<I>(x: &<I as Foo<A = Bar>>::A) {} |
| // error: associated item constraint are not allowed here |
| ``` |
| |
| To solve this error, please move the associated item constraints to the type |
| parameter declaration: |
| |
| ``` |
| # struct Bar; |
| # trait Foo { type A; } |
| fn baz<I: Foo<A=Bar>>(x: &<I as Foo>::A) {} // ok! |
| ``` |
| |
| Or into the where-clause: |
| |
| ``` |
| # struct Bar; |
| # trait Foo { type A; } |
| fn baz<I>(x: &<I as Foo>::A) where I: Foo<A=Bar> {} |
| ``` |