Remove the double auto-ref on arrays/strings as receivers

Part of #18469

[breaking-change]

A receiver will only ever get a single auto-reference. Previously arrays and strings would get two, e.g., [T] would be auto-ref'ed to &&[T]. This is usually apparent when a trait is implemented for `&[T]` and has a method takes self by reference. The usual solution is to implement the trait for `[T]` (the DST form).
This commit is contained in:
Nick Cameron
2014-12-12 13:23:21 +13:00
parent 0669a432a2
commit 769aa0a7b3
6 changed files with 22 additions and 76 deletions

View File

@@ -170,7 +170,7 @@ impl<'a> fmt::Show for Ascii {
/// Trait for converting into an ascii type.
#[experimental = "may be replaced by generic conversion traits"]
pub trait AsciiCast<T> {
pub trait AsciiCast<T> for Sized? {
/// Convert to an ascii type, panic on non-ASCII input.
#[inline]
fn to_ascii(&self) -> T {
@@ -196,10 +196,10 @@ pub trait AsciiCast<T> {
}
#[experimental = "may be replaced by generic conversion traits"]
impl<'a> AsciiCast<&'a[Ascii]> for &'a [u8] {
impl<'a> AsciiCast<&'a[Ascii]> for [u8] {
#[inline]
unsafe fn to_ascii_nocheck(&self) -> &'a[Ascii] {
mem::transmute(*self)
mem::transmute(self)
}
#[inline]
@@ -212,10 +212,10 @@ impl<'a> AsciiCast<&'a[Ascii]> for &'a [u8] {
}
#[experimental = "may be replaced by generic conversion traits"]
impl<'a> AsciiCast<&'a [Ascii]> for &'a str {
impl<'a> AsciiCast<&'a [Ascii]> for str {
#[inline]
unsafe fn to_ascii_nocheck(&self) -> &'a [Ascii] {
mem::transmute(*self)
mem::transmute(self)
}
#[inline]