#![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<dyn NotObjectSafe> { //~ ERROR the trait `NotObjectSafe` cannot be made into an | |
if true { | |
return Box::new(A); | |
} | |
Box::new(B) | |
} | |
fn main() {} |