1 // Macros with def-site hygiene still bring traits into scope. 2 // It is not clear whether this is desirable behavior or not. 3 // It is also not clear how to prevent it if it is not desirable. 4 5 // check-pass 6 7 #![feature(decl_macro)] 8 #![feature(trait_alias)] 9 10 mod traits { 11 pub trait Trait1 { simple_import(&self)12 fn simple_import(&self) {} 13 } 14 pub trait Trait2 { renamed_import(&self)15 fn renamed_import(&self) {} 16 } 17 pub trait Trait3 { underscore_import(&self)18 fn underscore_import(&self) {} 19 } 20 pub trait Trait4 { trait_alias(&self)21 fn trait_alias(&self) {} 22 } 23 24 impl Trait1 for () {} 25 impl Trait2 for () {} 26 impl Trait3 for () {} 27 impl Trait4 for () {} 28 } 29 30 macro m1() { 31 use traits::Trait1; 32 } 33 macro m2() { 34 use traits::Trait2 as Alias; 35 } 36 macro m3() { 37 use traits::Trait3 as _; 38 } 39 macro m4() { 40 trait Alias = traits::Trait4; 41 } 42 43 fn main() { 44 m1!(); 45 m2!(); 46 m3!(); 47 m4!(); 48 49 ().simple_import(); 50 ().renamed_import(); 51 ().underscore_import(); 52 ().trait_alias(); 53 } 54