#![deny(dead_code)] struct Used; struct Unused; //~ ERROR struct `Unused` is never constructed pub trait PubTrait { fn foo(&self) -> Self; } impl PubTrait for Used { fn foo(&self) -> Self { Used } } impl PubTrait for Unused { fn foo(&self) -> Self { Unused } } trait PriTrait { fn foo(&self) -> Self; } impl PriTrait for Used { fn foo(&self) -> Self { Used } } impl PriTrait for Unused { fn foo(&self) -> Self { Unused } } fn main() { let t = Used; let _t = ::foo(&t); let _t = ::foo(&t); }