trait DynIncompatible { | |
fn foo() -> Self; | |
} | |
trait DynCompatible { | |
fn bar(&self); | |
} | |
struct A; | |
struct B; | |
impl DynIncompatible for A { | |
fn foo() -> Self { | |
A | |
} | |
} | |
impl DynIncompatible for B { | |
fn foo() -> Self { | |
B | |
} | |
} | |
impl DynCompatible for A { | |
fn bar(&self) {} | |
} | |
impl DynCompatible for B { | |
fn bar(&self) {} | |
} | |
fn can() -> impl DynIncompatible { | |
if true { | |
return A; | |
} | |
B //~ ERROR mismatched types | |
} | |
fn cat() -> impl DynCompatible { | |
if true { | |
return A; | |
} | |
B //~ ERROR mismatched types | |
} | |
fn main() {} |