about summary refs log tree commit diff
path: root/tests/ui/closures/closure-clone-requires-captured-clone.rs
blob: 80938e50b67a770d0c0279e52df93148f9a5641d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//! Test that closures only implement `Clone` if all captured values implement `Clone`.
//!
//! When a closure captures variables from its environment, it can only be cloned
//! if all those captured variables are cloneable. This test makes sure the compiler
//! properly rejects attempts to clone closures that capture non-Clone types.

//@ compile-flags: --diagnostic-width=300

struct NonClone(i32);

fn main() {
    let captured_value = NonClone(5);
    let closure = move || {
        let _ = captured_value.0;
    };

    closure.clone();
    //~^ ERROR the trait bound `NonClone: Clone` is not satisfied
}