//@ run-pass
// Test that we can use method notation to call methods based on a
// projection bound from a trait. Issue #20469.

trait MakeString {
    fn make_string(&self) -> String;
}

impl MakeString for isize {
    fn make_string(&self) -> String {
        format!("{}", *self)
    }
}

impl MakeString for usize {
    fn make_string(&self) -> String {
        format!("{}", *self)
    }
}

trait Foo {
    type F: MakeString;

    fn get(&self) -> &Self::F;
}

fn foo<F:Foo>(f: &F) -> String {
    f.get().make_string()
}

struct SomeStruct {
    field: isize,
}

impl Foo for SomeStruct {
    type F = isize;

    fn get(&self) -> &isize {
        &self.field
    }
}

struct SomeOtherStruct {
    field: usize,
}

impl Foo for SomeOtherStruct {
    type F = usize;

    fn get(&self) -> &usize {
        &self.field
    }
}

fn main() {
    let x = SomeStruct { field: 22 };
    assert_eq!(foo(&x), format!("22"));

    let x = SomeOtherStruct { field: 44 };
    assert_eq!(foo(&x), format!("44"));
}
