Merge pull request #4101 from brson/bound-default-methods

Call default methods on bound typarams more correctly
This commit is contained in:
Brian Anderson 2012-12-07 15:10:57 -08:00
commit e71081ec03
10 changed files with 156 additions and 36 deletions

View file

@ -0,0 +1,15 @@
// xfail-test
trait A<T> {
fn g<U>(x: T, y: U) -> (T, U) { (move x, move y) }
}
impl int: A<int> { }
fn f<T, U, V: A<T>>(i: V, j: T, k: U) -> (T, U) {
i.g(move j, move k)
}
fn main () {
assert f(0, 1, 2) == (1, 2);
}

View file

@ -0,0 +1,15 @@
// xfail-test
trait A<T> {
fn g(x: T) -> T { move x }
}
impl int: A<int> { }
fn f<T, V: A<T>>(i: V, j: T) -> T {
i.g(move j)
}
fn main () {
assert f(0, 2) == 2;
}

View file

@ -0,0 +1,14 @@
trait A {
fn g<T>(x: T, y: T) -> (T, T) { (move x, move y) }
}
impl int: A { }
fn f<T, V: A>(i: V, j: T, k: T) -> (T, T) {
i.g(move j, move k)
}
fn main () {
assert f(0, 1, 2) == (1, 2);
assert f(0, 1u8, 2u8) == (1u8, 2u8);
}

View file

@ -0,0 +1,14 @@
trait A<T> {
fn g(x: uint) -> uint { move x }
}
impl<T> int: A<T> { }
fn f<T, V: A<T>>(i: V, j: uint) -> uint {
i.g(move j)
}
fn main () {
assert f::<float, int>(0, 2u) == 2u;
assert f::<uint, int>(0, 2u) == 2u;
}

View file

@ -0,0 +1,13 @@
trait A {
fn g() -> int { 10 }
}
impl int: A { }
fn f<T: A>(i: T) {
assert i.g() == 10;
}
fn main () {
f(0);
}