Merge pull request #4101 from brson/bound-default-methods
Call default methods on bound typarams more correctly
This commit is contained in:
commit
e71081ec03
10 changed files with 156 additions and 36 deletions
15
src/test/run-pass/trait-default-method-bound-subst.rs
Normal file
15
src/test/run-pass/trait-default-method-bound-subst.rs
Normal 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);
|
||||
}
|
||||
15
src/test/run-pass/trait-default-method-bound-subst2.rs
Normal file
15
src/test/run-pass/trait-default-method-bound-subst2.rs
Normal 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;
|
||||
}
|
||||
14
src/test/run-pass/trait-default-method-bound-subst3.rs
Normal file
14
src/test/run-pass/trait-default-method-bound-subst3.rs
Normal 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);
|
||||
}
|
||||
14
src/test/run-pass/trait-default-method-bound-subst4.rs
Normal file
14
src/test/run-pass/trait-default-method-bound-subst4.rs
Normal 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;
|
||||
}
|
||||
13
src/test/run-pass/trait-default-method-bound.rs
Normal file
13
src/test/run-pass/trait-default-method-bound.rs
Normal 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);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue