2015-02-14 00:52:55 +00:00
|
|
|
// Test that structs with higher-ranked where clauses don't generate
|
|
|
|
// "outlives" requirements. Issue #22246.
|
|
|
|
|
|
|
|
#![allow(dead_code)]
|
2018-10-30 23:18:11 +00:00
|
|
|
|
2015-03-31 23:58:01 +00:00
|
|
|
pub trait TheTrait<'b> {
|
2015-02-14 00:52:55 +00:00
|
|
|
type TheAssocType;
|
|
|
|
}
|
|
|
|
|
|
|
|
pub struct TheType<'b> {
|
|
|
|
m: [fn(&'b()); 0]
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<'a,'b> TheTrait<'a> for TheType<'b> {
|
|
|
|
type TheAssocType = &'b ();
|
|
|
|
}
|
|
|
|
|
|
|
|
pub struct WithHrAssoc<T>
|
|
|
|
where for<'a> T : TheTrait<'a>
|
|
|
|
{
|
|
|
|
m: [T; 0]
|
|
|
|
}
|
|
|
|
|
|
|
|
fn with_assoc<'a,'b>() {
|
2015-10-07 22:11:25 +00:00
|
|
|
// We get an error because 'b:'a does not hold:
|
2015-02-14 00:52:55 +00:00
|
|
|
|
|
|
|
let _: &'a WithHrAssoc<TheType<'b>> = loop { };
|
2022-04-01 17:13:25 +00:00
|
|
|
//~^ ERROR lifetime may not live long enough
|
2015-02-14 00:52:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
pub trait TheSubTrait : for<'a> TheTrait<'a> {
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<'b> TheSubTrait for TheType<'b> { }
|
|
|
|
|
|
|
|
pub struct WithHrAssocSub<T>
|
|
|
|
where T : TheSubTrait
|
|
|
|
{
|
|
|
|
m: [T; 0]
|
|
|
|
}
|
|
|
|
|
|
|
|
fn with_assoc_sub<'a,'b>() {
|
2015-08-07 17:25:23 +00:00
|
|
|
// The error here is just because `'b:'a` must hold for the type
|
|
|
|
// below to be well-formed, it is not related to the HR relation.
|
2015-02-14 00:52:55 +00:00
|
|
|
|
|
|
|
let _: &'a WithHrAssocSub<TheType<'b>> = loop { };
|
2022-04-01 17:13:25 +00:00
|
|
|
//~^ ERROR lifetime may not live long enough
|
2015-02-14 00:52:55 +00:00
|
|
|
}
|
|
|
|
|
2018-10-30 23:18:11 +00:00
|
|
|
|
2015-08-07 17:25:23 +00:00
|
|
|
fn main() {
|
2015-02-14 00:52:55 +00:00
|
|
|
}
|