error[E0308]: mismatched types --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:5:5 | LL | fn foo() -> impl std::fmt::Display { | ---------------------- expected `_` because of return type ... LL | 1u32 | ^^^^ expected `i32`, found `u32` error[E0308]: mismatched types --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:12:16 | LL | fn bar() -> impl std::fmt::Display { | ---------------------- expected `_` because of return type ... LL | return 1u32; | ^^^^ expected `i32`, found `u32` error[E0308]: mismatched types --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:20:9 | LL | fn baz() -> impl std::fmt::Display { | ---------------------- expected `_` because of return type ... LL | 1u32 | ^^^^ expected `i32`, found `u32` error[E0308]: `if` and `else` have incompatible types --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:28:9 | LL | / if false { LL | | 0i32 | | ---- expected because of this LL | | } else { LL | | 1u32 | | ^^^^ expected `i32`, found `u32` LL | | } | |_____- `if` and `else` have incompatible types error[E0308]: mismatched types --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:35:14 | LL | fn bat() -> impl std::fmt::Display { | ---------------------- expected `_` because of return type ... LL | _ => 1u32, | ^^^^ expected `i32`, found `u32` error[E0308]: mismatched types --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:40:5 | LL | fn can() -> impl std::fmt::Display { | ---------------------- expected `_` because of return type LL | / match 13 { LL | | 0 => return 0i32, LL | | 1 => 1u32, LL | | _ => 2u32, LL | | } | |_____^ expected `i32`, found `u32` error[E0308]: mismatched types --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:53:13 | LL | fn cat() -> impl std::fmt::Display { | ---------------------- expected `_` because of return type ... LL | 1u32 | ^^^^ expected `i32`, found `u32` error[E0308]: `match` arms have incompatible types --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:61:14 | LL | / match 13 { LL | | 0 => 0i32, | | ---- this is found to be of type `i32` LL | | 1 => 1u32, | | ^^^^ expected `i32`, found `u32` LL | | _ => 2u32, LL | | } | |_____- `match` arms have incompatible types error[E0308]: `if` and `else` have incompatible types --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:97:9 | LL | / if let Some(42) = Some(42) { LL | | 0i32 | | ---- expected because of this LL | | } else { LL | | 1u32 | | ^^^^ expected `i32`, found `u32` LL | | } | |_____- `if` and `else` have incompatible types error[E0746]: return type cannot have an unboxed trait object --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:66:13 | LL | fn hat() -> dyn std::fmt::Display { | ^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time | = note: for information on trait objects, see = note: if all the returned values were of the same type you could use `impl std::fmt::Display` as the return type = note: for information on `impl Trait`, see = note: you can create a new `enum` with a variant for each returned type help: return a boxed trait object instead | LL | fn hat() -> Box { | ++++ + help: ... and box this value | LL | return Box::new(0i32); | +++++++++ + help: ... and box this value | LL | Box::new(1u32) | +++++++++ + error[E0308]: `match` arms have incompatible types --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:80:14 | LL | / match 13 { LL | | 0 => 0i32, | | ---- this is found to be of type `i32` LL | | 1 => 1u32, | | ^^^^ expected `i32`, found `u32` LL | | _ => 2u32, LL | | } | |_____- `match` arms have incompatible types error[E0746]: return type cannot have an unboxed trait object --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:77:13 | LL | fn pug() -> dyn std::fmt::Display { | ^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time | = note: for information on trait objects, see = note: if all the returned values were of the same type you could use `impl std::fmt::Display` as the return type = note: for information on `impl Trait`, see = note: you can create a new `enum` with a variant for each returned type help: return a boxed trait object instead | LL | fn pug() -> Box { | ++++ + help: ... and box this value | LL | 0 => Box::new(0i32), | +++++++++ + help: ... and box this value | LL | 1 => Box::new(1u32), | +++++++++ + help: ... and box this value | LL | _ => Box::new(2u32), | +++++++++ + error[E0308]: `if` and `else` have incompatible types --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:89:9 | LL | / if false { LL | | 0i32 | | ---- expected because of this LL | | } else { LL | | 1u32 | | ^^^^ expected `i32`, found `u32` LL | | } | |_____- `if` and `else` have incompatible types error[E0746]: return type cannot have an unboxed trait object --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:85:13 | LL | fn man() -> dyn std::fmt::Display { | ^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time | = note: for information on trait objects, see = note: if all the returned values were of the same type you could use `impl std::fmt::Display` as the return type = note: for information on `impl Trait`, see = note: you can create a new `enum` with a variant for each returned type help: return a boxed trait object instead | LL | fn man() -> Box { | ++++ + help: ... and box this value | LL | Box::new(0i32) | +++++++++ + help: ... and box this value | LL | Box::new(1u32) | +++++++++ + error: aborting due to 14 previous errors Some errors have detailed explanations: E0308, E0746. For more information about an error, try `rustc --explain E0308`.