| 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> {} | |
| ``` |