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 @@ #![unstable] +use kinds::Sized; + /// A common trait for cloning an object. pub trait Clone { /// Returns a copy of the value. @@ -40,24 +42,12 @@ fn clone_from(&mut self, source: &Self) { } } -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() {}