// Combination of `ptr-to-trait-obj-different-args.rs` and `ptr-to-trait-obj-wrap.rs`. // // Checks that you *can't* change type arguments of trait objects in pointer casts involving // wrapping said traits structures. trait A {} struct W(T); struct X(T); fn unwrap(a: *const W>) -> *const dyn A { a as _ //~^ error casting `*const W<(dyn A + 'static)>` as `*const dyn A` is invalid } fn unwrap_nested(a: *const W>>) -> *const W> { a as _ //~^ error casting `*const W + 'static)>>` as `*const W>` is invalid } fn rewrap(a: *const W>) -> *const X> { a as _ //~^ error: casting `*const W<(dyn A + 'static)>` as `*const X>` is invalid } fn rewrap_nested(a: *const W>>) -> *const W>> { a as _ //~^ error: casting `*const W + 'static)>>` as `*const W>>` is invalid } fn wrap(a: *const dyn A) -> *const W> { a as _ //~^ error: casting `*const (dyn A + 'static)` as `*const W>` is invalid } fn main() {}