about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJorge Aparicio <japaricious@gmail.com>2014-11-17 14:35:27 -0500
committerJorge Aparicio <japaricious@gmail.com>2014-11-17 14:35:27 -0500
commitd429039e7baae7c3c0f18ef012c861f60c769157 (patch)
tree62fc9c5f3a4ae1a23498e8af4d0485711775a030
parent88c743def3cf42ee943ca09dda1e6dccf4894db9 (diff)
downloadrust-d429039e7baae7c3c0f18ef012c861f60c769157.tar.gz
rust-d429039e7baae7c3c0f18ef012c861f60c769157.zip
DSTify `impl Clone for &T`
Closes #19037
-rw-r--r--src/libcore/clone.rs16
-rw-r--r--src/test/run-pass/issue-19037.rs26
2 files changed, 29 insertions, 13 deletions
diff --git a/src/libcore/clone.rs b/src/libcore/clone.rs
index a495c780e02..d13daf0964a 100644
--- a/src/libcore/clone.rs
+++ b/src/libcore/clone.rs
@@ -23,6 +23,8 @@ the `clone` method.
 
 #![unstable]
 
+use kinds::Sized;
+
 /// A common trait for cloning an object.
 pub trait Clone {
     /// Returns a copy of the value.
@@ -40,24 +42,12 @@ pub trait Clone {
     }
 }
 
-impl<'a, T> Clone for &'a T {
+impl<'a, Sized? T> Clone for &'a T {
     /// Return a shallow copy of the reference.
     #[inline]
     fn clone(&self) -> &'a T { *self }
 }
 
-impl<'a, T> Clone for &'a [T] {
-    /// Return a shallow copy of the slice.
-    #[inline]
-    fn clone(&self) -> &'a [T] { *self }
-}
-
-impl<'a> Clone for &'a str {
-    /// Return a shallow copy of the slice.
-    #[inline]
-    fn clone(&self) -> &'a str { *self }
-}
-
 macro_rules! clone_impl(
     ($t:ty) => {
         impl Clone for $t {
diff --git a/src/test/run-pass/issue-19037.rs b/src/test/run-pass/issue-19037.rs
new file mode 100644
index 00000000000..a6b5f4b8744
--- /dev/null
+++ b/src/test/run-pass/issue-19037.rs
@@ -0,0 +1,26 @@
+// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+struct Str([u8]);
+
+#[deriving(Clone)]
+struct CharSplits<'a, Sep> {
+    string: &'a Str,
+    sep: Sep,
+    allow_trailing_empty: bool,
+    only_ascii: bool,
+    finished: bool,
+}
+
+fn clone(s: &Str) -> &Str {
+    Clone::clone(&s)
+}
+
+fn main() {}