| Two associated items (like methods, associated types, associated functions, | |
| etc.) were defined with the same identifier. | |
| Erroneous code example: | |
| ```compile_fail,E0201 | |
| struct Foo(u8); | |
| impl Foo { | |
| fn bar(&self) -> bool { self.0 > 5 } | |
| fn bar() {} // error: duplicate associated function | |
| } | |
| trait Baz { | |
| type Quux; | |
| fn baz(&self) -> bool; | |
| } | |
| impl Baz for Foo { | |
| type Quux = u32; | |
| fn baz(&self) -> bool { true } | |
| // error: duplicate method | |
| fn baz(&self) -> bool { self.0 > 5 } | |
| // error: duplicate associated type | |
| type Quux = u32; | |
| } | |
| ``` | |
| Note, however, that items with the same name are allowed for inherent `impl` | |
| blocks that don't overlap: | |
| ``` | |
| struct Foo<T>(T); | |
| impl Foo<u8> { | |
| fn bar(&self) -> bool { self.0 > 5 } | |
| } | |
| impl Foo<bool> { | |
| fn bar(&self) -> bool { self.0 } | |
| } | |
| ``` |