diff options
Diffstat (limited to 'src/liballoc')
| -rw-r--r-- | src/liballoc/boxed.rs | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/liballoc/boxed.rs b/src/liballoc/boxed.rs index 7696abd659f..7a089d733cf 100644 --- a/src/liballoc/boxed.rs +++ b/src/liballoc/boxed.rs @@ -240,6 +240,7 @@ impl<T: ?Sized + Hash> Hash for Box<T> { impl Box<Any> { #[inline] #[stable(feature = "rust1", since = "1.0.0")] + /// Attempt to downcast the box to a concrete type. pub fn downcast<T: Any>(self) -> Result<Box<T>, Box<Any>> { if self.is::<T>() { unsafe { @@ -257,11 +258,15 @@ impl Box<Any> { } } -impl Box<Any+Send> { +impl Box<Any + Send> { #[inline] #[stable(feature = "rust1", since = "1.0.0")] - pub fn downcast<T: Any>(self) -> Result<Box<T>, Box<Any>> { - <Box<Any>>::downcast(self) + /// Attempt to downcast the box to a concrete type. + pub fn downcast<T: Any>(self) -> Result<Box<T>, Box<Any + Send>> { + <Box<Any>>::downcast(self).map_err(|s| unsafe { + // reapply the Send marker + mem::transmute::<Box<Any>, Box<Any + Send>>(s) + }) } } |
