//@ run-pass | |
#![allow(non_camel_case_types)] | |
// Test that we pick which version of `foo` to run based on the | |
// type that is (ultimately) inferred for `x`. | |
trait foo { | |
fn foo(&self) -> i32; | |
} | |
impl foo for Vec<u32> { | |
fn foo(&self) -> i32 {1} | |
} | |
impl foo for Vec<i32> { | |
fn foo(&self) -> i32 {2} | |
} | |
fn call_foo_uint() -> i32 { | |
let mut x = Vec::new(); | |
let y = x.foo(); | |
x.push(0u32); | |
y | |
} | |
fn call_foo_int() -> i32 { | |
let mut x = Vec::new(); | |
let y = x.foo(); | |
x.push(0i32); | |
y | |
} | |
fn main() { | |
assert_eq!(call_foo_uint(), 1); | |
assert_eq!(call_foo_int(), 2); | |
} |