1 #![feature(decl_macro, associated_type_defaults)]
2 #![allow(unused, private_in_public)]
3 
4 mod priv_trait {
5     trait PrivTr {
6         type AssocTy = u8;
7     }
8     pub trait PubTr: PrivTr {}
9 
10     pub macro mac1() {
11         let _: Box<dyn PubTr<AssocTy = u8>>;
12         //~^ ERROR trait `PrivTr` is private
13         //~| ERROR trait `PrivTr` is private
14         type InSignatureTy2 = Box<dyn PubTr<AssocTy = u8>>;
15         //~^ ERROR trait `PrivTr` is private
16         trait InSignatureTr2: PubTr<AssocTy = u8> {}
17         //~^ ERROR trait `PrivTr` is private
18     }
19     pub macro mac2() {
20         let _: Box<dyn PrivTr<AssocTy = u8>>;
21         //~^ ERROR trait `PrivTr` is private
22         //~| ERROR trait `PrivTr` is private
23         type InSignatureTy1 = Box<dyn PrivTr<AssocTy = u8>>;
24         //~^ ERROR trait `PrivTr` is private
25         trait InSignatureTr1: PrivTr<AssocTy = u8> {}
26         //~^ ERROR trait `PrivTr` is private
27     }
28 }
priv_trait1()29 fn priv_trait1() {
30     priv_trait::mac1!();
31 }
priv_trait2()32 fn priv_trait2() {
33     priv_trait::mac2!();
34 }
35 
36 mod priv_parent_substs {
37     pub trait PubTrWithParam<T = Priv> {
38         type AssocTy = u8;
39     }
40     struct Priv;
41     pub trait PubTr: PubTrWithParam<Priv> {}
42 
43     pub macro mac() {
44         let _: Box<dyn PubTrWithParam<AssocTy = u8>>;
45         //~^ ERROR type `Priv` is private
46         //~| ERROR type `Priv` is private
47         let _: Box<dyn PubTr<AssocTy = u8>>;
48         //~^ ERROR type `Priv` is private
49         //~| ERROR type `Priv` is private
50         pub type InSignatureTy1 = Box<dyn PubTrWithParam<AssocTy = u8>>;
51         //~^ ERROR type `Priv` is private
52         pub type InSignatureTy2 = Box<dyn PubTr<AssocTy = u8>>;
53         //~^ ERROR type `Priv` is private
54         trait InSignatureTr1: PubTrWithParam<AssocTy = u8> {}
55         //~^ ERROR type `Priv` is private
56         trait InSignatureTr2: PubTr<AssocTy = u8> {}
57         //~^ ERROR type `Priv` is private
58     }
59 }
priv_parent_substs()60 fn priv_parent_substs() {
61     priv_parent_substs::mac!();
62 }
63 
main()64 fn main() {}
65