error[E0620]: cast to unsized type: `i32` as `dyn MyAdd` --> $DIR/type-parameter-defaults-referencing-Self-ppaux.rs:14:13 | LL | let y = x as dyn MyAdd; | ^^^^^^^^^^^^^^^^^^^ | help: consider using a box or reference as appropriate --> $DIR/type-parameter-defaults-referencing-Self-ppaux.rs:14:13 | LL | let y = x as dyn MyAdd; | ^ error[E0038]: the trait `MyAdd` cannot be made into an object --> $DIR/type-parameter-defaults-referencing-Self-ppaux.rs:14:18 | LL | let y = x as dyn MyAdd; | ^^^^^^^^^^^^^^ `MyAdd` cannot be made into an object | note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit --> $DIR/type-parameter-defaults-referencing-Self-ppaux.rs:6:55 | LL | trait MyAdd { fn add(&self, other: &Rhs) -> Self; } | ----- ^^^^ ...because method `add` references the `Self` type in its return type | | | this trait cannot be made into an object... = help: consider moving `add` to another trait error: aborting due to 2 previous errors Some errors have detailed explanations: E0038, E0620. For more information about an error, try `rustc --explain E0038`.