error[E0277]: the trait bound `dyn Setup: Setup` is not satisfied --> $DIR/object-unsafety.rs:12:12 | LL | copy::>(t) | ^^^^^^^^^^^^^^^^^ the trait `Setup` is not implemented for `dyn Setup` | note: required by a bound in `copy` --> $DIR/object-unsafety.rs:7:12 | LL | fn copy(from: &U::From) -> U::From { | ^^^^^ required by this bound in `copy` help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement | LL | pub fn copy_any(t: &T) -> T where dyn Setup: Setup { | ++++++++++++++++++++++++++++++++ error: the type `& as Setup>::From` is not well-formed --> $DIR/object-unsafety.rs:12:31 | LL | copy::>(t) | ^ error[E0308]: mismatched types --> $DIR/object-unsafety.rs:12:31 | LL | copy::>(t) | ------------------------- ^ types differ | | | arguments to this function are incorrect | = note: expected reference `& as Setup>::From` found reference `&T` note: function defined here --> $DIR/object-unsafety.rs:7:4 | LL | fn copy(from: &U::From) -> U::From { | ^^^^ -------------- error: the type ` as Setup>::From` is not well-formed --> $DIR/object-unsafety.rs:12:5 | LL | copy::>(t) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error[E0277]: the size for values of type ` as Setup>::From` cannot be known at compilation time --> $DIR/object-unsafety.rs:12:5 | LL | copy::>(t) | ^^^^^^^^^^^^^^^^^^^^^^^^^--- | | | doesn't have a size known at compile-time | this returned value is of type ` as Setup>::From` | = help: the trait `Sized` is not implemented for ` as Setup>::From` = note: the return type of a function must have a statically known size help: consider further restricting the associated type | LL | pub fn copy_any(t: &T) -> T where as Setup>::From: Sized { | +++++++++++++++++++++++++++++++++++++++++++++++++ error: aborting due to 5 previous errors Some errors have detailed explanations: E0277, E0308. For more information about an error, try `rustc --explain E0277`.