trait Super {} | |
trait Sub: Super {} | |
struct Wrapper<T: ?Sized>(T); | |
// This cast should not compile. | |
// Upcasting can't work here, because we are also changing the type (`Wrapper`), | |
// and reinterpreting would be confusing/surprising. | |
// See <https://github.com/rust-lang/rust/pull/120248#discussion_r1487739518> | |
fn cast(ptr: *const dyn Sub) -> *const Wrapper<dyn Super> { | |
ptr as _ //~ error: casting `*const (dyn Sub + 'static)` as `*const Wrapper<dyn Super>` is invalid | |
} | |
fn main() {} |