use result::{Result, Ok, Err};
use slice;
use slice::AsSlice;
+use clone::Clone;
// Note that this is not a lang item per se, but it has a hidden dependency on
// `Iterator`, which is one. The compiler assumes that the `next` method of
}
}
+impl<'a, T: Clone> Option<&'a T> {
+ /// Maps an Option<&T> to an Option<T> by cloning the contents of the Option<&T>.
+ #[unstable = "recently added as part of collections reform"]
+ pub fn cloned(self) -> Option<T> {
+ self.map(|t| t.clone())
+ }
+}
+
impl<T: Default> Option<T> {
/// Returns the contained value or a default
///
use core::option::*;
use core::kinds::marker;
use core::mem;
+use core::clone::Clone;
#[test]
fn test_get_ptr() {
assert!(v == None);
}
+
+fn test_cloned() {
+ let s = 1u32;
+ let n: Option<&'static u32> = None;
+ let o = Some(&s);
+
+ assert_eq!(o.clone(), Some(&s));
+ assert_eq!(o.cloned(), Some(1u32));
+
+ assert_eq!(n.clone(), None);
+ assert_eq!(n.cloned(), None);
+}
\ No newline at end of file