// provide custom privacy error for sealed traits pub mod a { pub trait Sealed: self::b::Hidden { fn foo() {} } struct X; impl Sealed for X {} impl self::b::Hidden for X {} mod b { pub trait Hidden {} } } pub mod c { pub trait Sealed: self::d::Hidden { fn foo() {} } struct X; impl Sealed for X {} impl self::d::Hidden for X {} struct Y; impl Sealed for Y {} impl self::d::Hidden for Y {} mod d { pub trait Hidden {} } } pub mod e { pub trait Sealed: self::f::Hidden { fn foo() {} } struct X; impl self::f::Hidden for X {} struct Y; impl self::f::Hidden for Y {} impl Sealed for T {} mod f { pub trait Hidden {} } } struct S; impl a::Sealed for S {} //~ ERROR the trait bound impl c::Sealed for S {} //~ ERROR the trait bound impl e::Sealed for S {} //~ ERROR the trait bound fn main() {}