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 this return type...
LL |     if false {
LL |         return 0i32;
   |                ---- ...is found to be `i32` here
LL |     }
LL |     1u32
   |     ^^^^ expected `i32`, found `u32`
   |
   = note: to return `impl Trait`, all returned values must be of the same type
   = note: for information on `impl Trait`, see <https://doc.rust-lang.org/book/ch10-02-traits.html#returning-types-that-implement-traits>
   = help: you can instead return a boxed trait object using `Box<dyn std::fmt::Display>`
   = note: for information on trait objects, see <https://doc.rust-lang.org/book/ch17-02-trait-objects.html#using-trait-objects-that-allow-for-values-of-different-types>
   = help: alternatively, create a new `enum` with a variant for each returned type

error[E0308]: mismatched types
  --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:13:16
   |
LL | fn bar() -> impl std::fmt::Display {
   |             ---------------------- expected because this return type...
LL |     if false {
LL |         return 0i32;
   |                ---- ...is found to be `i32` here
LL |     } else {
LL |         return 1u32;
   |                ^^^^ expected `i32`, found `u32`
   |
   = note: to return `impl Trait`, all returned values must be of the same type
   = note: for information on `impl Trait`, see <https://doc.rust-lang.org/book/ch10-02-traits.html#returning-types-that-implement-traits>
   = help: you can instead return a boxed trait object using `Box<dyn std::fmt::Display>`
   = note: for information on trait objects, see <https://doc.rust-lang.org/book/ch17-02-trait-objects.html#using-trait-objects-that-allow-for-values-of-different-types>
   = help: alternatively, create a new `enum` with a variant for each returned type

error[E0308]: mismatched types
  --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:22:9
   |
LL | fn baz() -> impl std::fmt::Display {
   |             ---------------------- expected because this return type...
LL |     if false {
LL |         return 0i32;
   |                ---- ...is found to be `i32` here
LL |     } else {
LL |         1u32
   |         ^^^^ expected `i32`, found `u32`
   |
   = note: to return `impl Trait`, all returned values must be of the same type
   = note: for information on `impl Trait`, see <https://doc.rust-lang.org/book/ch10-02-traits.html#returning-types-that-implement-traits>
   = help: you can instead return a boxed trait object using `Box<dyn std::fmt::Display>`
   = note: for information on trait objects, see <https://doc.rust-lang.org/book/ch17-02-trait-objects.html#using-trait-objects-that-allow-for-values-of-different-types>
   = help: alternatively, create a new `enum` with a variant for each returned type

error[E0308]: `if` and `else` have incompatible types
  --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:31:9
   |
LL | /     if false {
LL | |         0i32
   | |         ---- expected because of this
LL | |     } else {
LL | |         1u32
   | |         ^^^^ expected `i32`, found `u32`
LL | |
LL | |     }
   | |_____- `if` and `else` have incompatible types

error[E0308]: mismatched types
  --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:39:14
   |
LL | fn bat() -> impl std::fmt::Display {
   |             ---------------------- expected because this return type...
LL |     match 13 {
LL |         0 => return 0i32,
   |                     ---- ...is found to be `i32` here
LL |         _ => 1u32,
   |              ^^^^ expected `i32`, found `u32`
   |
   = note: to return `impl Trait`, all returned values must be of the same type
   = note: for information on `impl Trait`, see <https://doc.rust-lang.org/book/ch10-02-traits.html#returning-types-that-implement-traits>
   = help: you can instead return a boxed trait object using `Box<dyn std::fmt::Display>`
   = note: for information on trait objects, see <https://doc.rust-lang.org/book/ch17-02-trait-objects.html#using-trait-objects-that-allow-for-values-of-different-types>
   = help: alternatively, create a new `enum` with a variant for each returned type

error[E0308]: mismatched types
  --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:45:5
   |
LL |   fn can() -> impl std::fmt::Display {
   |               ---------------------- expected because this return type...
LL | /     match 13 {
LL | |
LL | |         0 => return 0i32,
   | |                     ---- ...is found to be `i32` here
LL | |         1 => 1u32,
LL | |         _ => 2u32,
LL | |     }
   | |_____^ expected `i32`, found `u32`
   |
   = note: to return `impl Trait`, all returned values must be of the same type
   = note: for information on `impl Trait`, see <https://doc.rust-lang.org/book/ch10-02-traits.html#returning-types-that-implement-traits>
   = help: you can instead return a boxed trait object using `Box<dyn std::fmt::Display>`
   = note: for information on trait objects, see <https://doc.rust-lang.org/book/ch17-02-trait-objects.html#using-trait-objects-that-allow-for-values-of-different-types>
   = help: alternatively, create a new `enum` with a variant for each returned type

error[E0308]: mismatched types
  --> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:59:13
   |
LL | fn cat() -> impl std::fmt::Display {
   |             ---------------------- expected because this return type...
...
LL |             return 0i32;
   |                    ---- ...is found to be `i32` here
...
LL |             1u32
   |             ^^^^ expected `i32`, found `u32`
   |
   = note: to return `impl Trait`, all returned values must be of the same type
   = note: for information on `impl Trait`, see <https://doc.rust-lang.org/book/ch10-02-traits.html#returning-types-that-implement-traits>
   = help: you can instead return a boxed trait object using `Box<dyn std::fmt::Display>`
   = note: for information on trait objects, see <https://doc.rust-lang.org/book/ch17-02-trait-objects.html#using-trait-objects-that-allow-for-values-of-different-types>
   = help: alternatively, create a new `enum` with a variant for each returned type

error: aborting due to 7 previous errors

For more information about this error, try `rustc --explain E0308`.
