rust/tests/ui/cast/ptr-to-trait-obj-different-regions-id-trait.rs

31 lines
564 B
Rust

//@ revisions: current next
//@ ignore-compare-mode-next-solver (explicit revisions)
//@[next] compile-flags: -Znext-solver
//@ check-fail
//
// Make sure we can't trick the compiler by using a projection.
trait Cat<'a> {}
impl Cat<'_> for () {}
trait Id {
type Id: ?Sized;
}
impl<T: ?Sized> Id for T {
type Id = T;
}
struct S<T: ?Sized> {
tail: <T as Id>::Id,
}
fn m<'a>() {
let unsend: *const dyn Cat<'a> = &();
let _send = unsend as *const S<dyn Cat<'static>>;
//~^ error: lifetime may not live long enough
}
fn main() {
m();
}