#![allow(bare_trait_objects)] struct Struct; trait Trait {} impl Trait for Struct {} impl Trait for u32 {} fn fuz() -> (usize, Trait) { (42, Struct) } //~^ ERROR E0277 //~| ERROR E0308 fn bar() -> (usize, dyn Trait) { (42, Struct) } //~^ ERROR E0277 //~| ERROR E0308 fn bap() -> Trait { Struct } //~^ ERROR E0746 fn ban() -> dyn Trait { Struct } //~^ ERROR E0746 fn bak() -> dyn Trait { unimplemented!() } //~ ERROR E0746 // Suggest using `Box` fn bal() -> dyn Trait { //~ ERROR E0746 if true { return Struct; } 42 } fn bax() -> dyn Trait { //~ ERROR E0746 if true { Struct } else { 42 } } fn bam() -> Box { if true { return Struct; //~ ERROR mismatched types } 42 //~ ERROR mismatched types } fn baq() -> Box { if true { return 0; //~ ERROR mismatched types } 42 //~ ERROR mismatched types } fn baz() -> Box { if true { Struct //~ ERROR mismatched types } else { 42 //~ ERROR mismatched types } } fn baw() -> Box { if true { 0 //~ ERROR mismatched types } else { 42 //~ ERROR mismatched types } } // Suggest using `impl Trait` fn bat() -> dyn Trait { //~ ERROR E0746 if true { return 0; } 42 } fn bay() -> dyn Trait { //~ ERROR E0746 if true { 0 } else { 42 } } fn main() {}