From d4fbb55c9c1eba39eca81b0d73fe9edf5e3869fd Mon Sep 17 00:00:00 2001 From: Ohad Ravid Date: Tue, 24 Dec 2019 19:14:20 +0100 Subject: Suggest adding a lifetime constraint when opaque type is responsible for "does not live long enough" error --- src/test/ui/impl-trait/does-not-live-long-enough.rs | 11 +++++++++++ .../ui/impl-trait/does-not-live-long-enough.stderr | 21 +++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 src/test/ui/impl-trait/does-not-live-long-enough.rs create mode 100644 src/test/ui/impl-trait/does-not-live-long-enough.stderr (limited to 'src/test/ui/impl-trait') diff --git a/src/test/ui/impl-trait/does-not-live-long-enough.rs b/src/test/ui/impl-trait/does-not-live-long-enough.rs new file mode 100644 index 00000000000..6179132b3f6 --- /dev/null +++ b/src/test/ui/impl-trait/does-not-live-long-enough.rs @@ -0,0 +1,11 @@ +struct List { + data: Vec, +} +impl List { + fn started_with<'a>(&'a self, prefix: &'a str) -> impl Iterator { + self.data.iter().filter(|s| s.starts_with(prefix)).map(|s| s.as_ref()) + //~^ ERROR does not live long enough + } +} + +fn main() {} diff --git a/src/test/ui/impl-trait/does-not-live-long-enough.stderr b/src/test/ui/impl-trait/does-not-live-long-enough.stderr new file mode 100644 index 00000000000..ddf81138daf --- /dev/null +++ b/src/test/ui/impl-trait/does-not-live-long-enough.stderr @@ -0,0 +1,21 @@ +error[E0597]: `prefix` does not live long enough + --> $DIR/does-not-live-long-enough.rs:6:51 + | +LL | fn started_with<'a>(&'a self, prefix: &'a str) -> impl Iterator { + | -- lifetime `'a` defined here --------------------------- opaque type requires that `prefix` is borrowed for `'a` +LL | self.data.iter().filter(|s| s.starts_with(prefix)).map(|s| s.as_ref()) + | --- ^^^^^^ borrowed value does not live long enough + | | + | value captured here +LL | +LL | } + | - `prefix` dropped here while still borrowed + | +help: you can add a constraint to the opaque type to make it last less than `'static` and match `'a` + | +LL | fn started_with<'a>(&'a self, prefix: &'a str) -> impl Iterator + 'a { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0597`. -- cgit 1.4.1-3-g733a5