about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAndrew Paseltiner <apaseltiner@gmail.com>2016-08-12 18:10:34 -0400
committerAndrew Paseltiner <apaseltiner@gmail.com>2016-08-14 22:04:01 -0400
commit1fd791ad62a4bb901be465997d9efbf4090819f0 (patch)
tree516c9810942c405b191ef90f9c349525729e0b73
parent13ff307f07327843348c0fb7476c4de77f95f89f (diff)
downloadrust-1fd791ad62a4bb901be465997d9efbf4090819f0.tar.gz
rust-1fd791ad62a4bb901be465997d9efbf4090819f0.zip
Implement `CoerceUnsized` for `{Cell, RefCell, UnsafeCell}`
-rw-r--r--src/libcore/cell.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/libcore/cell.rs b/src/libcore/cell.rs
index 17ec325e257..0a1fe3dbd77 100644
--- a/src/libcore/cell.rs
+++ b/src/libcore/cell.rs
@@ -337,6 +337,9 @@ impl<T: Copy> From<T> for Cell<T> {
     }
 }
 
+#[unstable(feature = "coerce_unsized", issue = "27732")]
+impl<T: CoerceUnsized<U>, U> CoerceUnsized<Cell<U>> for Cell<T> {}
+
 /// A mutable memory location with dynamically checked borrow rules
 ///
 /// See the [module-level documentation](index.html) for more.
@@ -757,6 +760,9 @@ impl<T> From<T> for RefCell<T> {
     }
 }
 
+#[unstable(feature = "coerce_unsized", issue = "27732")]
+impl<T: CoerceUnsized<U>, U> CoerceUnsized<RefCell<U>> for RefCell<T> {}
+
 struct BorrowRef<'b> {
     borrow: &'b Cell<BorrowFlag>,
 }
@@ -1086,3 +1092,13 @@ impl<T> From<T> for UnsafeCell<T> {
         UnsafeCell::new(t)
     }
 }
+
+#[unstable(feature = "coerce_unsized", issue = "27732")]
+impl<T: CoerceUnsized<U>, U> CoerceUnsized<UnsafeCell<U>> for UnsafeCell<T> {}
+
+#[allow(unused)]
+fn assert_coerce_unsized(a: UnsafeCell<&i32>, b: Cell<&i32>, c: RefCell<&i32>) {
+    let _: UnsafeCell<&Send> = a;
+    let _: Cell<&Send> = b;
+    let _: RefCell<&Send> = c;
+}