2014-10-16 19:40:21 +00:00
|
|
|
trait NoLifetime {
|
|
|
|
fn get<'p, T : Test<'p>>(&self) -> T;
|
2018-01-28 21:42:49 +00:00
|
|
|
//~^ NOTE lifetimes in impl do not match this method in trait
|
2014-10-16 19:40:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
trait Test<'p> {
|
|
|
|
fn new(buf: &'p mut [u8]) -> Self;
|
|
|
|
}
|
|
|
|
|
|
|
|
struct Foo<'a> {
|
|
|
|
buf: &'a mut [u8],
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<'a> Test<'a> for Foo<'a> {
|
|
|
|
fn new(buf: &'a mut [u8]) -> Foo<'a> {
|
|
|
|
Foo { buf: buf }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<'a> NoLifetime for Foo<'a> {
|
2020-06-15 04:36:25 +00:00
|
|
|
fn get<'p, T: Test<'a> + From<Foo<'a>>>(&self) -> T {
|
2018-01-28 21:42:49 +00:00
|
|
|
//~^ ERROR E0195
|
|
|
|
//~| NOTE lifetimes do not match method in trait
|
2015-04-14 12:23:02 +00:00
|
|
|
return *self as T;
|
2019-04-19 22:37:34 +00:00
|
|
|
//~^ ERROR non-primitive cast: `Foo<'a>` as `T`
|
2020-06-15 04:36:25 +00:00
|
|
|
//~| NOTE an `as` expression can only be used to convert between primitive types
|
2014-10-16 19:40:21 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {}
|