diff options
Diffstat (limited to '')
-rw-r--r-- | src/test/ui/issues/issue-18783.rs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/test/ui/issues/issue-18783.rs b/src/test/ui/issues/issue-18783.rs new file mode 100644 index 000000000..d4851ac14 --- /dev/null +++ b/src/test/ui/issues/issue-18783.rs @@ -0,0 +1,28 @@ +use std::cell::RefCell; + +fn main() { + let mut y = 1; + let c = RefCell::new(vec![]); + c.push(Box::new(|| y = 0)); + c.push(Box::new(|| y = 0)); +//~^ ERROR cannot borrow `y` as mutable more than once at a time +} + +fn ufcs() { + let mut y = 1; + let c = RefCell::new(vec![]); + + Push::push(&c, Box::new(|| y = 0)); + Push::push(&c, Box::new(|| y = 0)); +//~^ ERROR cannot borrow `y` as mutable more than once at a time +} + +trait Push<'c> { + fn push<'f: 'c>(&self, push: Box<dyn FnMut() + 'f>); +} + +impl<'c> Push<'c> for RefCell<Vec<Box<dyn FnMut() + 'c>>> { + fn push<'f: 'c>(&self, fun: Box<dyn FnMut() + 'f>) { + self.borrow_mut().push(fun) + } +} |