| // Macros with def-site hygiene still bring traits into scope. |
| // It is not clear whether this is desirable behavior or not. |
| // It is also not clear how to prevent it if it is not desirable. |
| |
| //@ check-pass |
| |
| #![feature(decl_macro)] |
| #![feature(trait_alias)] |
| |
| mod traits { |
| pub trait Trait1 { |
| fn simple_import(&self) {} |
| } |
| pub trait Trait2 { |
| fn renamed_import(&self) {} |
| } |
| pub trait Trait3 { |
| fn underscore_import(&self) {} |
| } |
| pub trait Trait4 { |
| fn trait_alias(&self) {} |
| } |
| |
| impl Trait1 for () {} |
| impl Trait2 for () {} |
| impl Trait3 for () {} |
| impl Trait4 for () {} |
| } |
| |
| macro m1() { |
| use traits::Trait1; |
| } |
| macro m2() { |
| use traits::Trait2 as Alias; |
| } |
| macro m3() { |
| use traits::Trait3 as _; |
| } |
| macro m4() { |
| trait Alias = traits::Trait4; |
| } |
| |
| fn main() { |
| m1!(); |
| m2!(); |
| m3!(); |
| m4!(); |
| |
| ().simple_import(); |
| ().renamed_import(); |
| ().underscore_import(); |
| ().trait_alias(); |
| } |