From d429039e7baae7c3c0f18ef012c861f60c769157 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Mon, 17 Nov 2014 14:35:27 -0500 Subject: [PATCH] DSTify `impl Clone for &T` Closes #19037 --- src/libcore/clone.rs | 16 +++------------- src/test/run-pass/issue-19037.rs | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 13 deletions(-) create mode 100644 src/test/run-pass/issue-19037.rs 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 or the MIT license +// , 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() {}