| An attempt was made to retrieve an associated type, but the type was ambiguous. | |
| Erroneous code example: | |
| ```compile_fail,E0223 | |
| trait Trait { type X; } | |
| fn main() { | |
| let foo: Trait::X; | |
| } | |
| ``` | |
| The problem here is that we're attempting to take the associated type of `X` | |
| from `Trait`. Unfortunately, the type of `X` is not defined, because it's only | |
| made concrete in implementations of the trait. A working version of this code | |
| might look like: | |
| ``` | |
| trait Trait { type X; } | |
| struct Struct; | |
| impl Trait for Struct { | |
| type X = u32; | |
| } | |
| fn main() { | |
| let foo: <Struct as Trait>::X; | |
| } | |
| ``` | |
| This syntax specifies that we want the associated type `X` from `Struct`'s | |
| implementation of `Trait`. | |
| Due to internal limitations of the current compiler implementation we cannot | |
| simply use `Struct::X`. |