// run-pass

#![feature(trait_alias)]

mod inner {
    pub trait Foo {
        fn foo(&self);
    }

    pub struct Qux;

    impl Foo for Qux {
        fn foo(&self) {}
    }

    pub trait Bar = Foo;
}

mod two {
    pub trait A {
        fn foo();
    }

    impl A for u8 {
        fn foo() {}
    }
}

// Import only the alias, not the `Foo` trait.
use inner::{Bar, Qux};

// Declaring an alias also brings in aliased methods.
trait Two = two::A;

fn main() {
    let q = Qux;
    q.foo(); // From Bar.

    u8::foo(); // From A.
}
