| // Test overloaded resolution of fn_traits. |
| //@ run-pass |
| |
| #![feature(fn_traits)] |
| #![feature(unboxed_closures)] |
| |
| #[derive(Debug, PartialEq, Eq)] |
| struct Ishmael; |
| #[derive(Debug, PartialEq, Eq)] |
| struct Maybe; |
| struct CallMe; |
| |
| impl FnOnce<(Ishmael,)> for CallMe { |
| type Output = Ishmael; |
| extern "rust-call" fn call_once(self, _args: (Ishmael,)) -> Ishmael { |
| println!("Split your lungs with blood and thunder!"); |
| Ishmael |
| } |
| } |
| |
| impl FnOnce<(Maybe,)> for CallMe { |
| type Output = Maybe; |
| extern "rust-call" fn call_once(self, _args: (Maybe,)) -> Maybe { |
| println!("So we just met, and this is crazy"); |
| Maybe |
| } |
| } |
| |
| fn main() { |
| assert_eq!(CallMe(Ishmael), Ishmael); |
| assert_eq!(CallMe(Maybe), Maybe); |
| } |