error[E0308]: mismatched types
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:7:35
   |
LL | fn fuz() -> (usize, Trait) { (42, Struct) }
   |                                   ^^^^^^ expected `dyn Trait`, found `Struct`
   |
   = note: expected trait object `(dyn Trait + 'static)`
                    found struct `Struct`

error[E0277]: the size for values of type `(dyn Trait + 'static)` cannot be known at compilation time
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:7:13
   |
LL | fn fuz() -> (usize, Trait) { (42, Struct) }
   |             ^^^^^^^^^^^^^^   ------------ this returned value is of type `(usize, (dyn Trait + 'static))`
   |             |
   |             doesn't have a size known at compile-time
   |
   = help: within `(usize, (dyn Trait + 'static))`, the trait `Sized` is not implemented for `(dyn Trait + 'static)`
   = note: required because it appears within the type `(usize, dyn Trait)`
   = note: the return type of a function must have a statically known size

error[E0308]: mismatched types
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:10:39
   |
LL | fn bar() -> (usize, dyn Trait) { (42, Struct) }
   |                                       ^^^^^^ expected `dyn Trait`, found `Struct`
   |
   = note: expected trait object `(dyn Trait + 'static)`
                    found struct `Struct`

error[E0277]: the size for values of type `(dyn Trait + 'static)` cannot be known at compilation time
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:10:13
   |
LL | fn bar() -> (usize, dyn Trait) { (42, Struct) }
   |             ^^^^^^^^^^^^^^^^^^   ------------ this returned value is of type `(usize, (dyn Trait + 'static))`
   |             |
   |             doesn't have a size known at compile-time
   |
   = help: within `(usize, (dyn Trait + 'static))`, the trait `Sized` is not implemented for `(dyn Trait + 'static)`
   = note: required because it appears within the type `(usize, dyn Trait)`
   = note: the return type of a function must have a statically known size

error[E0746]: return type cannot have an unboxed trait object
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:13:13
   |
LL | fn bap() -> Trait { Struct }
   |             ^^^^^ doesn't have a size known at compile-time
   |
   = note: for information on `impl Trait`, see <https://doc.rust-lang.org/book/ch10-02-traits.html#returning-types-that-implement-traits>
help: use `impl Trait` as the return type, as all return paths are of type `Struct`, which implements `Trait`
   |
LL | fn bap() -> impl Trait { Struct }
   |             ~~~~~~~~~~

error[E0746]: return type cannot have an unboxed trait object
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:15:13
   |
LL | fn ban() -> dyn Trait { Struct }
   |             ^^^^^^^^^ doesn't have a size known at compile-time
   |
   = note: for information on `impl Trait`, see <https://doc.rust-lang.org/book/ch10-02-traits.html#returning-types-that-implement-traits>
help: use `impl Trait` as the return type, as all return paths are of type `Struct`, which implements `Trait`
   |
LL | fn ban() -> impl Trait { Struct }
   |             ~~~~~~~~~~

error[E0746]: return type cannot have an unboxed trait object
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:17:13
   |
LL | fn bak() -> dyn Trait { unimplemented!() }
   |             ^^^^^^^^^ doesn't have a size known at compile-time
   |
help: use `impl Trait` as the return type if all return paths have the same type but you want to expose only the trait in the signature
   |
LL | fn bak() -> impl Trait { unimplemented!() }
   |             ~~~~~~~~~~
help: use a boxed trait object if all return paths implement trait `Trait`
   |
LL | fn bak() -> Box<dyn Trait> { unimplemented!() }
   |             ++++         +

error[E0746]: return type cannot have an unboxed trait object
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:19:13
   |
LL | fn bal() -> dyn Trait {
   |             ^^^^^^^^^ doesn't have a size known at compile-time
   |
   = 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>
   = note: if all the returned values were of the same type you could use `impl Trait` as the return type
   = note: for information on `impl Trait`, see <https://doc.rust-lang.org/book/ch10-02-traits.html#returning-types-that-implement-traits>
   = note: you can create a new `enum` with a variant for each returned type
help: return a boxed trait object instead
   |
LL | fn bal() -> Box<dyn Trait> {
   |             ++++         +
help: ... and box this value
   |
LL |         return Box::new(Struct);
   |                +++++++++      +
help: ... and box this value
   |
LL |     Box::new(42)
   |     +++++++++  +

error[E0308]: `if` and `else` have incompatible types
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:29:9
   |
LL | /     if true {
LL | |         Struct
   | |         ------ expected because of this
LL | |     } else {
LL | |         42
   | |         ^^ expected `Struct`, found integer
LL | |     }
   | |_____- `if` and `else` have incompatible types

error[E0746]: return type cannot have an unboxed trait object
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:25:13
   |
LL | fn bax() -> dyn Trait {
   |             ^^^^^^^^^ doesn't have a size known at compile-time
   |
   = 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>
   = note: if all the returned values were of the same type you could use `impl Trait` as the return type
   = note: for information on `impl Trait`, see <https://doc.rust-lang.org/book/ch10-02-traits.html#returning-types-that-implement-traits>
   = note: you can create a new `enum` with a variant for each returned type
help: return a boxed trait object instead
   |
LL | fn bax() -> Box<dyn Trait> {
   |             ++++         +
help: ... and box this value
   |
LL |         Box::new(Struct)
   |         +++++++++      +
help: ... and box this value
   |
LL |         Box::new(42)
   |         +++++++++  +

error[E0308]: mismatched types
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:34:16
   |
LL | fn bam() -> Box<dyn Trait> {
   |             -------------- expected `Box<(dyn Trait + 'static)>` because of return type
LL |     if true {
LL |         return Struct;
   |                ^^^^^^ expected `Box<dyn Trait>`, found `Struct`
   |
   = note: expected struct `Box<(dyn Trait + 'static)>`
              found struct `Struct`
   = note: for more on the distinction between the stack and the heap, read https://doc.rust-lang.org/book/ch15-01-box.html, https://doc.rust-lang.org/rust-by-example/std/box.html, and https://doc.rust-lang.org/std/boxed/index.html
help: store this in the heap by calling `Box::new`
   |
LL |         return Box::new(Struct);
   |                +++++++++      +

error[E0308]: mismatched types
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:36:5
   |
LL | fn bam() -> Box<dyn Trait> {
   |             -------------- expected `Box<(dyn Trait + 'static)>` because of return type
...
LL |     42
   |     ^^ expected `Box<dyn Trait>`, found integer
   |
   = note: expected struct `Box<(dyn Trait + 'static)>`
                found type `{integer}`
   = note: for more on the distinction between the stack and the heap, read https://doc.rust-lang.org/book/ch15-01-box.html, https://doc.rust-lang.org/rust-by-example/std/box.html, and https://doc.rust-lang.org/std/boxed/index.html
help: store this in the heap by calling `Box::new`
   |
LL |     Box::new(42)
   |     +++++++++  +

error[E0308]: mismatched types
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:40:16
   |
LL | fn baq() -> Box<dyn Trait> {
   |             -------------- expected `Box<(dyn Trait + 'static)>` because of return type
LL |     if true {
LL |         return 0;
   |                ^ expected `Box<dyn Trait>`, found integer
   |
   = note: expected struct `Box<(dyn Trait + 'static)>`
                found type `{integer}`
   = note: for more on the distinction between the stack and the heap, read https://doc.rust-lang.org/book/ch15-01-box.html, https://doc.rust-lang.org/rust-by-example/std/box.html, and https://doc.rust-lang.org/std/boxed/index.html
help: store this in the heap by calling `Box::new`
   |
LL |         return Box::new(0);
   |                +++++++++ +

error[E0308]: mismatched types
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:42:5
   |
LL | fn baq() -> Box<dyn Trait> {
   |             -------------- expected `Box<(dyn Trait + 'static)>` because of return type
...
LL |     42
   |     ^^ expected `Box<dyn Trait>`, found integer
   |
   = note: expected struct `Box<(dyn Trait + 'static)>`
                found type `{integer}`
   = note: for more on the distinction between the stack and the heap, read https://doc.rust-lang.org/book/ch15-01-box.html, https://doc.rust-lang.org/rust-by-example/std/box.html, and https://doc.rust-lang.org/std/boxed/index.html
help: store this in the heap by calling `Box::new`
   |
LL |     Box::new(42)
   |     +++++++++  +

error[E0308]: mismatched types
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:46:9
   |
LL | fn baz() -> Box<dyn Trait> {
   |             -------------- expected `Box<(dyn Trait + 'static)>` because of return type
LL |     if true {
LL |         Struct
   |         ^^^^^^ expected `Box<dyn Trait>`, found `Struct`
   |
   = note: expected struct `Box<(dyn Trait + 'static)>`
              found struct `Struct`
   = note: for more on the distinction between the stack and the heap, read https://doc.rust-lang.org/book/ch15-01-box.html, https://doc.rust-lang.org/rust-by-example/std/box.html, and https://doc.rust-lang.org/std/boxed/index.html
help: store this in the heap by calling `Box::new`
   |
LL |         Box::new(Struct)
   |         +++++++++      +

error[E0308]: mismatched types
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:48:9
   |
LL | fn baz() -> Box<dyn Trait> {
   |             -------------- expected `Box<(dyn Trait + 'static)>` because of return type
...
LL |         42
   |         ^^ expected `Box<dyn Trait>`, found integer
   |
   = note: expected struct `Box<(dyn Trait + 'static)>`
                found type `{integer}`
   = note: for more on the distinction between the stack and the heap, read https://doc.rust-lang.org/book/ch15-01-box.html, https://doc.rust-lang.org/rust-by-example/std/box.html, and https://doc.rust-lang.org/std/boxed/index.html
help: store this in the heap by calling `Box::new`
   |
LL |         Box::new(42)
   |         +++++++++  +

error[E0308]: mismatched types
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:53:9
   |
LL | fn baw() -> Box<dyn Trait> {
   |             -------------- expected `Box<(dyn Trait + 'static)>` because of return type
LL |     if true {
LL |         0
   |         ^ expected `Box<dyn Trait>`, found integer
   |
   = note: expected struct `Box<(dyn Trait + 'static)>`
                found type `{integer}`
   = note: for more on the distinction between the stack and the heap, read https://doc.rust-lang.org/book/ch15-01-box.html, https://doc.rust-lang.org/rust-by-example/std/box.html, and https://doc.rust-lang.org/std/boxed/index.html
help: store this in the heap by calling `Box::new`
   |
LL |         Box::new(0)
   |         +++++++++ +

error[E0308]: mismatched types
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:55:9
   |
LL | fn baw() -> Box<dyn Trait> {
   |             -------------- expected `Box<(dyn Trait + 'static)>` because of return type
...
LL |         42
   |         ^^ expected `Box<dyn Trait>`, found integer
   |
   = note: expected struct `Box<(dyn Trait + 'static)>`
                found type `{integer}`
   = note: for more on the distinction between the stack and the heap, read https://doc.rust-lang.org/book/ch15-01-box.html, https://doc.rust-lang.org/rust-by-example/std/box.html, and https://doc.rust-lang.org/std/boxed/index.html
help: store this in the heap by calling `Box::new`
   |
LL |         Box::new(42)
   |         +++++++++  +

error[E0746]: return type cannot have an unboxed trait object
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:60:13
   |
LL | fn bat() -> dyn Trait {
   |             ^^^^^^^^^ doesn't have a size known at compile-time
   |
   = note: for information on `impl Trait`, see <https://doc.rust-lang.org/book/ch10-02-traits.html#returning-types-that-implement-traits>
help: use `impl Trait` as the return type, as all return paths are of type `{integer}`, which implements `Trait`
   |
LL | fn bat() -> impl Trait {
   |             ~~~~~~~~~~

error[E0746]: return type cannot have an unboxed trait object
  --> $DIR/dyn-trait-return-should-be-impl-trait.rs:66:13
   |
LL | fn bay() -> dyn Trait {
   |             ^^^^^^^^^ doesn't have a size known at compile-time
   |
   = note: for information on `impl Trait`, see <https://doc.rust-lang.org/book/ch10-02-traits.html#returning-types-that-implement-traits>
help: use `impl Trait` as the return type, as all return paths are of type `{integer}`, which implements `Trait`
   |
LL | fn bay() -> impl Trait {
   |             ~~~~~~~~~~

error: aborting due to 20 previous errors

Some errors have detailed explanations: E0277, E0308, E0746.
For more information about an error, try `rustc --explain E0277`.
