mirror of
https://github.com/rust-lang/rust.git
synced 2025-10-20 03:52:33 +00:00

This CL makes a number of small changes to dyn compatibility errors: - "object safety" has been renamed to "dyn-compatibility" throughout - "Convert to enum" suggestions are no longer generated when there exists a type-generic impl of the trait or an impl for `dyn OtherTrait` - Several error messages are reorganized for user readability Additionally, the dyn compatibility error creation code has been split out into functions. cc #132713 cc #133267
38 lines
686 B
Rust
38 lines
686 B
Rust
#![allow(bare_trait_objects)]
|
|
|
|
trait DynIncompatible {
|
|
fn foo() -> Self;
|
|
}
|
|
|
|
struct A;
|
|
struct B;
|
|
|
|
impl DynIncompatible for A {
|
|
fn foo() -> Self {
|
|
A
|
|
}
|
|
}
|
|
|
|
impl DynIncompatible for B {
|
|
fn foo() -> Self {
|
|
B
|
|
}
|
|
}
|
|
|
|
fn car() -> dyn DynIncompatible { //~ ERROR the trait `DynIncompatible` is not dyn compatible
|
|
//~^ ERROR return type cannot have an unboxed trait object
|
|
if true {
|
|
return A;
|
|
}
|
|
B
|
|
}
|
|
|
|
fn cat() -> Box<dyn DynIncompatible> { //~ ERROR the trait `DynIncompatible` is not dyn compatible
|
|
if true {
|
|
return Box::new(A); //~ ERROR is not dyn compatible
|
|
}
|
|
Box::new(B) //~ ERROR is not dyn compatible
|
|
}
|
|
|
|
fn main() {}
|