mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 08:13:41 +00:00
Updated error code explanation
This commit is contained in:
parent
02f7806ecd
commit
ad7c2b0660
@ -27,6 +27,40 @@ fn bar<F, G>(t: F, u: G)
|
||||
fn main() { }
|
||||
```
|
||||
|
||||
This error also includes the use of associated types with lifetime parameters.
|
||||
```compile_fail,E0582
|
||||
trait Foo {
|
||||
type Assoc<'a>;
|
||||
}
|
||||
|
||||
struct Bar<X, F>
|
||||
where
|
||||
X: Foo,
|
||||
F: for<'a> Fn(X::Assoc<'a>) -> &'a i32
|
||||
{
|
||||
x: X,
|
||||
f: F
|
||||
}
|
||||
```
|
||||
This is as `Foo::Assoc<'a>` could be implemented by a type that does not use
|
||||
the `'a` parameter, so there is no guarentee that `X::Assoc<'a>` actually uses
|
||||
`'a`.
|
||||
|
||||
To fix this we can pass a dummy parameter:
|
||||
```
|
||||
# trait Foo {
|
||||
# type Assoc<'a>;
|
||||
# }
|
||||
struct Bar<X, F>
|
||||
where
|
||||
X: Foo,
|
||||
F: for<'a> Fn(X::Assoc<'a>, /* dummy */ &'a ()) -> &'a i32
|
||||
{
|
||||
x: X,
|
||||
f: F
|
||||
}
|
||||
```
|
||||
|
||||
Note: The examples above used to be (erroneously) accepted by the
|
||||
compiler, but this was since corrected. See [issue #33685] for more
|
||||
details.
|
||||
|
Loading…
Reference in New Issue
Block a user