diff options
| author | Andrew Paseltiner <apaseltiner@gmail.com> | 2016-08-12 18:10:34 -0400 |
|---|---|---|
| committer | Andrew Paseltiner <apaseltiner@gmail.com> | 2016-08-14 22:04:01 -0400 |
| commit | 1fd791ad62a4bb901be465997d9efbf4090819f0 (patch) | |
| tree | 516c9810942c405b191ef90f9c349525729e0b73 | |
| parent | 13ff307f07327843348c0fb7476c4de77f95f89f (diff) | |
| download | rust-1fd791ad62a4bb901be465997d9efbf4090819f0.tar.gz rust-1fd791ad62a4bb901be465997d9efbf4090819f0.zip | |
Implement `CoerceUnsized` for `{Cell, RefCell, UnsafeCell}`
| -rw-r--r-- | src/libcore/cell.rs | 16 |
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; +} |
