error[E0308]: `match` arms have incompatible types --> $DIR/wf-unsafe-trait-obj-match.rs:23:17 | LL | / match opt() { LL | | Some(()) => &S, | | -- this is found to be of type `&S` LL | | None => &R, | | ^^ expected struct `S`, found struct `R` LL | | } | |_____- `match` arms have incompatible types | = note: expected reference `&S` found reference `&R` error[E0038]: the trait `Trait` cannot be made into an object --> $DIR/wf-unsafe-trait-obj-match.rs:26:21 | LL | Some(()) => &S, | ^^ `Trait` 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/wf-unsafe-trait-obj-match.rs:6:14 | LL | trait Trait: Sized {} | ----- ^^^^^ ...because it requires `Self: Sized` | | | this trait cannot be made into an object... = note: required for `&S` to implement `CoerceUnsized<&dyn Trait>` = note: required by cast to type `&dyn Trait` error[E0038]: the trait `Trait` cannot be made into an object --> $DIR/wf-unsafe-trait-obj-match.rs:25:25 | LL | let t: &dyn Trait = match opt() { | _________________________^ LL | | Some(()) => &S, LL | | None => &R, LL | | }; | |_____^ `Trait` 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/wf-unsafe-trait-obj-match.rs:6:14 | LL | trait Trait: Sized {} | ----- ^^^^^ ...because it requires `Self: Sized` | | | this trait cannot be made into an object... = note: required for `&R` to implement `CoerceUnsized<&dyn Trait>` = note: required by cast to type `&dyn Trait` error: aborting due to 3 previous errors Some errors have detailed explanations: E0038, E0308. For more information about an error, try `rustc --explain E0038`.