summaryrefslogtreecommitdiffstats
path: root/src/test/ui/suggestions/lifetimes/missing-lifetimes-in-signature.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/suggestions/lifetimes/missing-lifetimes-in-signature.rs')
-rw-r--r--src/test/ui/suggestions/lifetimes/missing-lifetimes-in-signature.rs111
1 files changed, 0 insertions, 111 deletions
diff --git a/src/test/ui/suggestions/lifetimes/missing-lifetimes-in-signature.rs b/src/test/ui/suggestions/lifetimes/missing-lifetimes-in-signature.rs
deleted file mode 100644
index b641f5941..000000000
--- a/src/test/ui/suggestions/lifetimes/missing-lifetimes-in-signature.rs
+++ /dev/null
@@ -1,111 +0,0 @@
-pub trait Get<T> {
- fn get(self) -> T;
-}
-
-struct Foo {
- x: usize,
-}
-
-impl Get<usize> for Foo {
- fn get(self) -> usize {
- self.x
- }
-}
-
-fn foo<G, T>(g: G, dest: &mut T) -> impl FnOnce()
-where
- G: Get<T>,
-{
- move || {
- //~^ ERROR hidden type for `impl FnOnce()` captures lifetime
- *dest = g.get();
- }
-}
-
-// After applying suggestion for `foo`:
-fn bar<G, T>(g: G, dest: &mut T) -> impl FnOnce() + '_
-where
- G: Get<T>,
-{
- move || {
- //~^ ERROR the parameter type `G` may not live long enough
- *dest = g.get();
- }
-}
-
-// After applying suggestion for `bar`:
-fn baz<G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_
-//~^ ERROR undeclared lifetime name `'a`
-where
- G: Get<T>,
-{
- move || {
- *dest = g.get();
- }
-}
-
-// After applying suggestion for `baz`:
-fn qux<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_
-where
- G: Get<T>,
-{
- move || {
- //~^ ERROR the parameter type `G` may not live long enough
- *dest = g.get();
- }
-}
-
-// Same as above, but show that we pay attention to lifetime names from parent item
-impl<'a> Foo {
- fn qux<'b, G: Get<T> + 'b, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ {
- move || {
- //~^ ERROR the parameter type `G` may not live long enough
- *dest = g.get();
- }
- }
-}
-
-// After applying suggestion for `qux`:
-fn bat<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ + 'a
-where
- G: Get<T>,
-{
- move || {
- //~^ ERROR the parameter type `G` may not live long enough
- //~| ERROR explicit lifetime required
- *dest = g.get();
- }
-}
-
-// Potential incorrect attempt:
-fn bak<'a, G, T>(g: G, dest: &'a mut T) -> impl FnOnce() + 'a
-where
- G: Get<T>,
-{
- move || {
- //~^ ERROR the parameter type `G` may not live long enough
- *dest = g.get();
- }
-}
-
-// We need to tie the lifetime of `G` with the lifetime of `&mut T` and the returned closure:
-fn ok<'a, G: 'a, T>(g: G, dest: &'a mut T) -> impl FnOnce() + 'a
-where
- G: Get<T>,
-{
- move || {
- *dest = g.get();
- }
-}
-
-// This also works. The `'_` isn't necessary but it's where we arrive to following the suggestions:
-fn ok2<'a, G: 'a, T>(g: G, dest: &'a mut T) -> impl FnOnce() + '_ + 'a
-where
- G: Get<T>,
-{
- move || {
- *dest = g.get();
- }
-}
-
-fn main() {}