about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libcore/tuple.rs17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/libcore/tuple.rs b/src/libcore/tuple.rs
index a5c86d592c6..35b8496f6c5 100644
--- a/src/libcore/tuple.rs
+++ b/src/libcore/tuple.rs
@@ -10,6 +10,7 @@
 
 //! Operations on tuples
 
+use clone::Clone;
 use kinds::Copy;
 use vec;
 
@@ -46,6 +47,15 @@ impl<T:Copy,U:Copy> CopyableTuple<T, U> for (T, U) {
 
 }
 
+impl<T:Clone,U:Clone> Clone for (T, U) {
+    fn clone(&self) -> (T, U) {
+        let (a, b) = match *self {
+            (ref a, ref b) => (a, b)
+        };
+        (a.clone(), b.clone())
+    }
+}
+
 pub trait ImmutableTuple<T, U> {
     fn first_ref(&self) -> &'self T;
     fn second_ref(&self) -> &'self U;
@@ -252,3 +262,10 @@ fn test_tuple() {
     assert!(('a', 2).swap() == (2, 'a'));
 }
 
+#[test]
+fn test_clone() {
+    let a = (1, ~"2");
+    let b = a.clone();
+    assert!(a.first() == b.first());
+    assert!(a.second() == b.second());
+}