2023-01-18 03:28:19 -06:00
|
|
|
use std::marker::PhantomData;
|
|
|
|
struct Foo<'a, 'b, T>(PhantomData<(&'a (), &'b (), T)>)
|
|
|
|
where
|
|
|
|
Foo<'short, 'out, T>: Convert<'a, 'b>;
|
2023-10-18 03:47:17 -05:00
|
|
|
//~^ ERROR use of undeclared lifetime name
|
|
|
|
//~| ERROR use of undeclared lifetime name `'out`
|
2023-01-18 03:28:19 -06:00
|
|
|
|
|
|
|
trait Convert<'a, 'b>: Sized {
|
|
|
|
fn cast(&'a self) -> &'b Self;
|
|
|
|
}
|
|
|
|
impl<'long: 'short, 'short, T> Convert<'long, 'b> for Foo<'short, 'out, T> {
|
|
|
|
//~^ ERROR use of undeclared lifetime name
|
|
|
|
//~^^ ERROR use of undeclared lifetime name `'out`
|
|
|
|
fn cast(&'long self) -> &'short Foo<'short, 'out, T> {
|
|
|
|
//~^ ERROR use of undeclared lifetime name
|
|
|
|
self
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn badboi<'in_, 'out, T>(x: Foo<'in_, 'out, T>, sadness: &'in_ Foo<'short, 'out, T>) -> &'out T {
|
|
|
|
//~^ ERROR use of undeclared lifetime name
|
2023-10-18 03:47:17 -05:00
|
|
|
sadness.cast()
|
2023-01-18 03:28:19 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {}
|