Skip to content

Commit c717c59

Browse files
committed
Add multiple closure use variants
1 parent ec3820a commit c717c59

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#![feature(ergonomic_clones)]
2+
#![allow(incomplete_features)]
3+
4+
use std::clone::UseCloned;
5+
6+
fn takes_val<T>(_: T) {}
7+
fn takes_ref<'a, T>(_: &'a T) {}
8+
9+
#[derive(Clone)]
10+
struct Inner<'a, T>(&'a T);
11+
12+
impl<'a, T> UseCloned for Inner<'a, T> where T: Clone {}
13+
14+
fn main() {
15+
let v = String::new();
16+
let inner = Inner(&v);
17+
18+
let _ = use || {
19+
takes_ref(inner.0);
20+
takes_val(inner.0)
21+
};
22+
let _ = use || {
23+
takes_ref(inner.0);
24+
takes_val(inner.0);
25+
takes_val(inner.0);
26+
takes_val(inner)
27+
};
28+
let _ = use || {
29+
takes_ref(inner.0);
30+
takes_val(inner.0);
31+
takes_val(inner);
32+
takes_val(inner)
33+
//~^ ERROR: use of moved value: `inner` [E0382]
34+
};
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
error[E0382]: use of moved value: `inner`
2+
--> $DIR/multiple-use-variants.rs:32:19
3+
|
4+
LL | takes_val(inner);
5+
| ----- value moved here
6+
LL | takes_val(inner)
7+
| ^^^^^ value used here after move
8+
|
9+
= note: move occurs because `inner` has type `Inner<'_, String>`, which does not implement the `Copy` trait
10+
11+
error: aborting due to 1 previous error
12+
13+
For more information about this error, try `rustc --explain E0382`.

0 commit comments

Comments
 (0)