about summary refs log tree commit diff
path: root/tests/ui/closures/closure-immut-capture-error.rs
blob: 19fe599f241166b9c4c97b3a77cde6a3e1408071 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//! Tests that mutation of captured immutable variables in closures are not permitted.

#![feature(unboxed_closures, tuple_trait)]

use std::io::Read;

fn to_fn_once<A: std::marker::Tuple, F: FnOnce<A>>(f: F) -> F {
    f
}

fn main() {
    let x = 1;
    to_fn_once(move || {
        x = 2;
        //~^ ERROR: cannot assign to `x`, as it is not declared as mutable
    });

    let s = std::io::stdin();
    to_fn_once(move || {
        s.read_to_end(&mut Vec::new());
        //~^ ERROR: cannot borrow `s` as mutable, as it is not declared as mutable
    });
}