"Outlived by" bound for higher-ranked lifetimes
Open
Nobody has claimed this yet.
T-lang
- Dominant language
- Markdown
- Stars
- 6.6k
- Forks
- 1.7k
- Avg merge
- 16h 14m
- Merged PRs (30d)
- 1
Description
The following code yields a compilation error:
trait Foo<'a> {
fn foo(&'a mut self);
}
impl<'a, T: 'a> Foo<'a> for Vec<T> {
fn foo(&'a mut self) {}
}
fn bar<F>(x: &mut F) where F: for<'a> Foo<'a> {
x.foo();
}
fn main() {
let a = ();
let mut v = vec![&a]; //~ ERROR `a` does not live long enough
//~^ reference must be valid for the static lifetime
bar(&mut v);
}
This is the correct behavior, as v clearly does not implement Foo<'a> for all 'a.
I would like to use something like the following instead, but there is no way to achieve it:
fn bar<'x, F>(x: &'x mut F) where F: for<'a outlived by 'x> Foo<'a> { ... }
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by compiling the Rust reproducer in the issue and reviewing how higher-ranked trait bounds and lifetime outlives requirements are currently handled. Done would require a settled design and implementation for expressing the proposed bound, with the example compiling under the intended semantics.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- compilers
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100