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()29fn priv_trait1() { 30 priv_trait::mac1!(); 31 } priv_trait2()32fn 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()60fn priv_parent_substs() { 61 priv_parent_substs::mac!(); 62 } 63 main()64fn main() {} 65