]> git.proxmox.com Git - rustc.git/blame - src/librustc_error_codes/error_codes/E0223.md
New upstream version 1.47.0+dfsg1
[rustc.git] / src / librustc_error_codes / error_codes / E0223.md
CommitLineData
60c5eb7d 1An attempt was made to retrieve an associated type, but the type was ambiguous.
dfeec247
XL
2
3Erroneous code example:
60c5eb7d
XL
4
5```compile_fail,E0223
6trait MyTrait {type X; }
7
8fn main() {
9 let foo: MyTrait::X;
10}
11```
12
13The problem here is that we're attempting to take the type of X from MyTrait.
14Unfortunately, the type of X is not defined, because it's only made concrete in
15implementations of the trait. A working version of this code might look like:
16
17```
18trait MyTrait {type X; }
19struct MyStruct;
20
21impl MyTrait for MyStruct {
22 type X = u32;
23}
24
25fn main() {
26 let foo: <MyStruct as MyTrait>::X;
27}
28```
29
30This syntax specifies that we want the X type from MyTrait, as made concrete in
31MyStruct. The reason that we cannot simply use `MyStruct::X` is that MyStruct
32might implement two different traits with identically-named associated types.
33This syntax allows disambiguation between the two.