| //@ 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); |
| } |