File tree 1 file changed +15
-13
lines changed
compiler/rustc_error_codes/src/error_codes
1 file changed +15
-13
lines changed Original file line number Diff line number Diff line change @@ -3,31 +3,33 @@ An attempt was made to retrieve an associated type, but the type was ambiguous.
3
3
Erroneous code example:
4
4
5
5
``` compile_fail,E0223
6
- trait MyTrait { type X; }
6
+ trait Trait { type X; }
7
7
8
8
fn main() {
9
- let foo: MyTrait ::X;
9
+ let foo: Trait ::X;
10
10
}
11
11
```
12
12
13
- The problem here is that we're attempting to take the type of X from MyTrait.
14
- Unfortunately, the type of X is not defined, because it's only made concrete in
15
- implementations of the trait. A working version of this code might look like:
13
+ The problem here is that we're attempting to take the associated type of ` X `
14
+ from ` Trait ` . Unfortunately, the type of ` X ` is not defined, because it's only
15
+ made concrete in implementations of the trait. A working version of this code
16
+ might look like:
16
17
17
18
```
18
- trait MyTrait {type X; }
19
- struct MyStruct;
19
+ trait Trait { type X; }
20
20
21
- impl MyTrait for MyStruct {
21
+ struct Struct;
22
+ impl Trait for Struct {
22
23
type X = u32;
23
24
}
24
25
25
26
fn main() {
26
- let foo: <MyStruct as MyTrait >::X;
27
+ let foo: <Struct as Trait >::X;
27
28
}
28
29
```
29
30
30
- This syntax specifies that we want the X type from MyTrait, as made concrete in
31
- MyStruct. The reason that we cannot simply use ` MyStruct::X ` is that MyStruct
32
- might implement two different traits with identically-named associated types.
33
- This syntax allows disambiguation between the two.
31
+ This syntax specifies that we want the associated type ` X ` from ` Struct ` 's
32
+ implementation of ` Trait ` .
33
+
34
+ Due to internal limitations of the current compiler implementation we cannot
35
+ simply use ` Struct::X ` .
You can’t perform that action at this time.
0 commit comments