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