#![allow(bare_trait_objects)] trait NotObjectSafe { fn foo() -> Self; } struct A; struct B; impl NotObjectSafe for A { fn foo() -> Self { A } } impl NotObjectSafe for B { fn foo() -> Self { B } } fn car() -> dyn NotObjectSafe { //~ ERROR the trait `NotObjectSafe` cannot be made into an object if true { return A; } B } fn cat() -> Box { //~ ERROR the trait `NotObjectSafe` cannot be made into an if true { return Box::new(A); } Box::new(B) } fn main() {}