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