summaryrefslogtreecommitdiffstats
path: root/src/test/ui/closures/issue-42463.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/closures/issue-42463.rs')
-rw-r--r--src/test/ui/closures/issue-42463.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/test/ui/closures/issue-42463.rs b/src/test/ui/closures/issue-42463.rs
new file mode 100644
index 000000000..51d6ea3f7
--- /dev/null
+++ b/src/test/ui/closures/issue-42463.rs
@@ -0,0 +1,32 @@
+// run-pass
+use std::ops::{Deref, DerefMut};
+
+struct CheckedDeref<T, F> {
+ value: T,
+ check: F
+}
+
+impl<F: Fn(&T) -> bool, T> Deref for CheckedDeref<T, F> {
+ type Target = T;
+ fn deref(&self) -> &T {
+ assert!((self.check)(&self.value));
+ &self.value
+ }
+}
+
+impl<F: Fn(&T) -> bool, T> DerefMut for CheckedDeref<T, F> {
+ fn deref_mut(&mut self) -> &mut T {
+ assert!((self.check)(&self.value));
+ &mut self.value
+ }
+}
+
+
+fn main() {
+ let mut v = CheckedDeref {
+ value: vec![0],
+ check: |v: &Vec<_>| !v.is_empty()
+ };
+ v.push(1);
+ assert_eq!(*v, vec![0, 1]);
+}