]> git.lizzy.rs Git - rust.git/blob - compiler/rustc_error_codes/src/error_codes/E0221.md
Merge commit '953f024793dab92745fee9cd2c4dee6a60451771' into clippyup
[rust.git] / compiler / rustc_error_codes / src / error_codes / E0221.md
1 An attempt was made to retrieve an associated type, but the type was ambiguous.
2
3 Erroneous code example:
4
5 ```compile_fail,E0221
6 trait T1 {}
7 trait T2 {}
8
9 trait Foo {
10     type A: T1;
11 }
12
13 trait Bar : Foo {
14     type A: T2;
15     fn do_something() {
16         let _: Self::A;
17     }
18 }
19 ```
20
21 In this example, `Foo` defines an associated type `A`. `Bar` inherits that type
22 from `Foo`, and defines another associated type of the same name. As a result,
23 when we attempt to use `Self::A`, it's ambiguous whether we mean the `A` defined
24 by `Foo` or the one defined by `Bar`.
25
26 There are two options to work around this issue. The first is simply to rename
27 one of the types. Alternatively, one can specify the intended type using the
28 following syntax:
29
30 ```
31 trait T1 {}
32 trait T2 {}
33
34 trait Foo {
35     type A: T1;
36 }
37
38 trait Bar : Foo {
39     type A: T2;
40     fn do_something() {
41         let _: <Self as Bar>::A;
42     }
43 }
44 ```