Rollup merge of #124746 - OliverKillane:E0582-explain-assoc-types-improvement, r=pnkfelix
`rustc --explain E0582` additional example ## Context *From #124744* Expands the example for E0582, an error ensuring that lifetime in a function's return type is sufficiently constrained (e.g. actually tied to some input type), to show an additional example where one sees the lifetime occurring syntactically among the relevant function input types, but is nonetheless rejected by rustc because a syntactic occurrence is not always sufficient.
This commit is contained in:
commit
28deff4244
1 changed files with 34 additions and 0 deletions
|
@ -27,6 +27,40 @@ fn bar<F, G>(t: F, u: G)
|
||||||
fn main() { }
|
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
|
||||||
|
}
|
||||||
|
```
|
||||||
|
The latter scenario encounters this error because `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
|
Note: The examples above used to be (erroneously) accepted by the
|
||||||
compiler, but this was since corrected. See [issue #33685] for more
|
compiler, but this was since corrected. See [issue #33685] for more
|
||||||
details.
|
details.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue