]> git.lizzy.rs Git - rust.git/blob - tests/ui/closures/issue-42463.rs
Auto merge of #107541 - weihanglo:update-cargo, r=weihanglo
[rust.git] / tests / ui / closures / issue-42463.rs
1 // run-pass
2 use std::ops::{Deref, DerefMut};
3
4 struct CheckedDeref<T, F> {
5     value: T,
6     check: F
7 }
8
9 impl<F: Fn(&T) -> bool, T> Deref for CheckedDeref<T, F> {
10     type Target = T;
11     fn deref(&self) -> &T {
12         assert!((self.check)(&self.value));
13         &self.value
14     }
15 }
16
17 impl<F: Fn(&T) -> bool, T> DerefMut for CheckedDeref<T, F> {
18     fn deref_mut(&mut self) -> &mut T {
19         assert!((self.check)(&self.value));
20         &mut self.value
21     }
22 }
23
24
25 fn main() {
26     let mut v = CheckedDeref {
27         value: vec![0],
28         check: |v: &Vec<_>| !v.is_empty()
29     };
30     v.push(1);
31     assert_eq!(*v, vec![0, 1]);
32 }