DSTify impl Clone for &T

Closes #19037
This commit is contained in:
Jorge Aparicio 2014-11-17 14:35:27 -05:00
parent 88c743def3
commit d429039e7b
2 changed files with 29 additions and 13 deletions

View file

@ -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 {

View file

@ -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() {}