• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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