mirror of https://github.com/rust-lang/rust
95 lines
3.1 KiB
Plaintext
95 lines
3.1 KiB
Plaintext
error[E0308]: `if` and `else` have incompatible types
|
|
--> $DIR/suggest-box-on-divergent-if-else-arms.rs:15:9
|
|
|
|
|
LL | let _ = if true {
|
|
| _____________-
|
|
LL | | Struct
|
|
| | ------ expected because of this
|
|
LL | | } else {
|
|
LL | | foo()
|
|
| | ^^^^^ expected `Struct`, found `Box<dyn Trait>`
|
|
LL | | };
|
|
| |_____- `if` and `else` have incompatible types
|
|
|
|
|
= note: expected struct `Struct`
|
|
found struct `Box<dyn Trait>`
|
|
help: `Struct` implements `Trait` so you can box it to coerce to the trait object `Box<dyn Trait>`
|
|
|
|
|
LL | Box::new(Struct)
|
|
| +++++++++ +
|
|
|
|
error[E0308]: `if` and `else` have incompatible types
|
|
--> $DIR/suggest-box-on-divergent-if-else-arms.rs:20:9
|
|
|
|
|
LL | let _ = if true {
|
|
| _____________-
|
|
LL | | foo()
|
|
| | ----- expected because of this
|
|
LL | | } else {
|
|
LL | | Struct
|
|
| | ^^^^^^ expected `Box<dyn Trait>`, found `Struct`
|
|
LL | | };
|
|
| |_____- `if` and `else` have incompatible types
|
|
|
|
|
= note: expected struct `Box<dyn Trait>`
|
|
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]: `if` and `else` have incompatible types
|
|
--> $DIR/suggest-box-on-divergent-if-else-arms.rs:25:9
|
|
|
|
|
LL | fn bar() -> impl Trait {
|
|
| ---------- the found opaque type
|
|
...
|
|
LL | let _ = if true {
|
|
| _____________-
|
|
LL | | Struct
|
|
| | ------ expected because of this
|
|
LL | | } else {
|
|
LL | | bar()
|
|
| | ^^^^^ expected `Struct`, found opaque type
|
|
LL | | };
|
|
| |_____- `if` and `else` have incompatible types
|
|
|
|
|
= note: expected struct `Struct`
|
|
found opaque type `impl Trait`
|
|
help: `Struct` implements `Trait` so you can box both arms and coerce to the trait object `Box<dyn Trait>`
|
|
|
|
|
LL ~ Box::new(Struct) as Box<dyn Trait>
|
|
LL | } else {
|
|
LL ~ Box::new(bar())
|
|
|
|
|
|
|
error[E0308]: `if` and `else` have incompatible types
|
|
--> $DIR/suggest-box-on-divergent-if-else-arms.rs:30:9
|
|
|
|
|
LL | fn bar() -> impl Trait {
|
|
| ---------- the expected opaque type
|
|
...
|
|
LL | let _ = if true {
|
|
| _____________-
|
|
LL | | bar()
|
|
| | ----- expected because of this
|
|
LL | | } else {
|
|
LL | | Struct
|
|
| | ^^^^^^ expected opaque type, found `Struct`
|
|
LL | | };
|
|
| |_____- `if` and `else` have incompatible types
|
|
|
|
|
= note: expected opaque type `impl Trait`
|
|
found struct `Struct`
|
|
help: `Struct` implements `Trait` so you can box both arms and coerce to the trait object `Box<dyn Trait>`
|
|
|
|
|
LL ~ Box::new(bar()) as Box<dyn Trait>
|
|
LL | } else {
|
|
LL ~ Box::new(Struct)
|
|
|
|
|
|
|
error: aborting due to 4 previous errors
|
|
|
|
For more information about this error, try `rustc --explain E0308`.
|