//@ run-rustfix #![allow(unused)] #![deny(explicit_outlives_requirements)] // Programmatically generated examples! // // Exercise outlives bounds for each of the following parameter/position // combinations— // // • one generic parameter (T) bound inline // • one parameter (T) with a where clause // • two parameters (T and U), both bound inline // • two parameters (T and U), one bound inline, one with a where clause // • two parameters (T and U), both with where clauses // // —and for every permutation of 1 or 2 lifetimes to outlive and 0 or 1 trait // bounds distributed among said parameters (subject to no where clause being // empty and the struct having at least one lifetime). // // —and for each of tuple structs, enums and unions. mod structs { use std::fmt::Debug; struct TeeOutlivesAy<'a, T: 'a> { //~^ ERROR outlives requirements can be inferred tee: &'a T } struct TeeOutlivesAyIsDebug<'a, T: 'a + Debug> { //~^ ERROR outlives requirements can be inferred tee: &'a T } struct TeeIsDebugOutlivesAy<'a, T: Debug + 'a> { //~^ ERROR outlives requirements can be inferred tee: &'a T } struct TeeOutlivesAyBee<'a, 'b, T: 'a + 'b> { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T } struct TeeOutlivesAyBeeIsDebug<'a, 'b, T: 'a + 'b + Debug> { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T } struct TeeIsDebugOutlivesAyBee<'a, 'b, T: Debug + 'a + 'b> { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T } struct TeeWhereOutlivesAy<'a, T> where T: 'a { //~^ ERROR outlives requirements can be inferred tee: &'a T } struct TeeWhereOutlivesAyIsDebug<'a, T> where T: 'a + Debug { //~^ ERROR outlives requirements can be inferred tee: &'a T } struct TeeWhereIsDebugOutlivesAy<'a, T> where T: Debug + 'a { //~^ ERROR outlives requirements can be inferred tee: &'a T } struct TeeWhereOutlivesAyBee<'a, 'b, T> where T: 'a + 'b { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T } struct TeeWhereOutlivesAyBeeIsDebug<'a, 'b, T> where T: 'a + 'b + Debug { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T } struct TeeWhereIsDebugOutlivesAyBee<'a, 'b, T> where T: Debug + 'a + 'b { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T } struct TeeYooOutlivesAy<'a, T, U: 'a> { //~^ ERROR outlives requirements can be inferred tee: T, yoo: &'a U } struct TeeYooOutlivesAyIsDebug<'a, T, U: 'a + Debug> { //~^ ERROR outlives requirements can be inferred tee: T, yoo: &'a U } struct TeeYooIsDebugOutlivesAy<'a, T, U: Debug + 'a> { //~^ ERROR outlives requirements can be inferred tee: T, yoo: &'a U } struct TeeOutlivesAyYooIsDebug<'a, T: 'a, U: Debug> { //~^ ERROR outlives requirements can be inferred tee: &'a T, yoo: U } struct TeeYooOutlivesAyBee<'a, 'b, T, U: 'a + 'b> { //~^ ERROR outlives requirements can be inferred tee: T, yoo: &'a &'b U } struct TeeYooOutlivesAyBeeIsDebug<'a, 'b, T, U: 'a + 'b + Debug> { //~^ ERROR outlives requirements can be inferred tee: T, yoo: &'a &'b U } struct TeeYooIsDebugOutlivesAyBee<'a, 'b, T, U: Debug + 'a + 'b> { //~^ ERROR outlives requirements can be inferred tee: T, yoo: &'a &'b U } struct TeeOutlivesAyBeeYooIsDebug<'a, 'b, T: 'a + 'b, U: Debug> { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T, yoo: U } struct TeeYooWhereOutlivesAy<'a, T, U> where U: 'a { //~^ ERROR outlives requirements can be inferred tee: T, yoo: &'a U } struct TeeYooWhereOutlivesAyIsDebug<'a, T, U> where U: 'a + Debug { //~^ ERROR outlives requirements can be inferred tee: T, yoo: &'a U } struct TeeYooWhereIsDebugOutlivesAy<'a, T, U> where U: Debug + 'a { //~^ ERROR outlives requirements can be inferred tee: T, yoo: &'a U } struct TeeOutlivesAyYooWhereIsDebug<'a, T: 'a, U> where U: Debug { //~^ ERROR outlives requirements can be inferred tee: &'a T, yoo: U } struct TeeYooWhereOutlivesAyBee<'a, 'b, T, U> where U: 'a + 'b { //~^ ERROR outlives requirements can be inferred tee: T, yoo: &'a &'b U } struct TeeYooWhereOutlivesAyBeeIsDebug<'a, 'b, T, U> where U: 'a + 'b + Debug { //~^ ERROR outlives requirements can be inferred tee: T, yoo: &'a &'b U } struct TeeYooWhereIsDebugOutlivesAyBee<'a, 'b, T, U> where U: Debug + 'a + 'b { //~^ ERROR outlives requirements can be inferred tee: T, yoo: &'a &'b U } struct TeeOutlivesAyBeeYooWhereIsDebug<'a, 'b, T: 'a + 'b, U> where U: Debug { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T, yoo: U } struct TeeWhereOutlivesAyYooWhereIsDebug<'a, T, U> where T: 'a, U: Debug { //~^ ERROR outlives requirements can be inferred tee: &'a T, yoo: U } struct TeeWhereOutlivesAyBeeYooWhereIsDebug<'a, 'b, T, U> where T: 'a + 'b, U: Debug { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T, yoo: U } struct BeeOutlivesAy<'a, 'b: 'a> { //~^ ERROR outlives requirements can be inferred tee: &'a &'b (), } struct BeeWhereOutlivesAy<'a, 'b> where 'b: 'a { //~^ ERROR outlives requirements can be inferred tee: &'a &'b (), } struct BeeOutlivesAyTee<'a, 'b: 'a, T> { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T, } struct BeeWhereOutlivesAyTee<'a, 'b, T> where 'b: 'a { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T, } struct BeeWhereOutlivesAyTeeWhereBee<'a, 'b, T> where 'b: 'a, T: 'b { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T, } struct BeeWhereOutlivesAyTeeWhereAyBee<'a, 'b, T> where 'b: 'a, T: 'a + 'b { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T, } struct BeeOutlivesAyTeeDebug<'a, 'b: 'a, T: Debug> { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T, } struct BeeWhereOutlivesAyTeeWhereDebug<'a, 'b, T> where 'b: 'a, T: Debug { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T, } } mod tuple_structs { use std::fmt::Debug; struct TeeOutlivesAy<'a, T: 'a>(&'a T); //~^ ERROR outlives requirements can be inferred struct TeeOutlivesAyIsDebug<'a, T: 'a + Debug>(&'a T); //~^ ERROR outlives requirements can be inferred struct TeeIsDebugOutlivesAy<'a, T: Debug + 'a>(&'a T); //~^ ERROR outlives requirements can be inferred struct TeeOutlivesAyBee<'a, 'b, T: 'a + 'b>(&'a &'b T); //~^ ERROR outlives requirements can be inferred struct TeeOutlivesAyBeeIsDebug<'a, 'b, T: 'a + 'b + Debug>(&'a &'b T); //~^ ERROR outlives requirements can be inferred struct TeeIsDebugOutlivesAyBee<'a, 'b, T: Debug + 'a + 'b>(&'a &'b T); //~^ ERROR outlives requirements can be inferred struct TeeWhereOutlivesAy<'a, T>(&'a T) where T: 'a; //~^ ERROR outlives requirements can be inferred struct TeeWhereOutlivesAyIsDebug<'a, T>(&'a T) where T: 'a + Debug; //~^ ERROR outlives requirements can be inferred struct TeeWhereIsDebugOutlivesAy<'a, T>(&'a T) where T: Debug + 'a; //~^ ERROR outlives requirements can be inferred struct TeeWhereOutlivesAyBee<'a, 'b, T>(&'a &'b T) where T: 'a + 'b; //~^ ERROR outlives requirements can be inferred struct TeeWhereOutlivesAyBeeIsDebug<'a, 'b, T>(&'a &'b T) where T: 'a + 'b + Debug; //~^ ERROR outlives requirements can be inferred struct TeeWhereIsDebugOutlivesAyBee<'a, 'b, T>(&'a &'b T) where T: Debug + 'a + 'b; //~^ ERROR outlives requirements can be inferred struct TeeYooOutlivesAy<'a, T, U: 'a>(T, &'a U); //~^ ERROR outlives requirements can be inferred struct TeeYooOutlivesAyIsDebug<'a, T, U: 'a + Debug>(T, &'a U); //~^ ERROR outlives requirements can be inferred struct TeeYooIsDebugOutlivesAy<'a, T, U: Debug + 'a>(T, &'a U); //~^ ERROR outlives requirements can be inferred struct TeeOutlivesAyYooIsDebug<'a, T: 'a, U: Debug>(&'a T, U); //~^ ERROR outlives requirements can be inferred struct TeeYooOutlivesAyBee<'a, 'b, T, U: 'a + 'b>(T, &'a &'b U); //~^ ERROR outlives requirements can be inferred struct TeeYooOutlivesAyBeeIsDebug<'a, 'b, T, U: 'a + 'b + Debug>(T, &'a &'b U); //~^ ERROR outlives requirements can be inferred struct TeeYooIsDebugOutlivesAyBee<'a, 'b, T, U: Debug + 'a + 'b>(T, &'a &'b U); //~^ ERROR outlives requirements can be inferred struct TeeOutlivesAyBeeYooIsDebug<'a, 'b, T: 'a + 'b, U: Debug>(&'a &'b T, U); //~^ ERROR outlives requirements can be inferred struct TeeYooWhereOutlivesAy<'a, T, U>(T, &'a U) where U: 'a; //~^ ERROR outlives requirements can be inferred struct TeeYooWhereOutlivesAyIsDebug<'a, T, U>(T, &'a U) where U: 'a + Debug; //~^ ERROR outlives requirements can be inferred struct TeeYooWhereIsDebugOutlivesAy<'a, T, U>(T, &'a U) where U: Debug + 'a; //~^ ERROR outlives requirements can be inferred struct TeeOutlivesAyYooWhereIsDebug<'a, T: 'a, U>(&'a T, U) where U: Debug; //~^ ERROR outlives requirements can be inferred struct TeeYooWhereOutlivesAyBee<'a, 'b, T, U>(T, &'a &'b U) where U: 'a + 'b; //~^ ERROR outlives requirements can be inferred struct TeeYooWhereOutlivesAyBeeIsDebug<'a, 'b, T, U>(T, &'a &'b U) where U: 'a + 'b + Debug; //~^ ERROR outlives requirements can be inferred struct TeeYooWhereIsDebugOutlivesAyBee<'a, 'b, T, U>(T, &'a &'b U) where U: Debug + 'a + 'b; //~^ ERROR outlives requirements can be inferred struct TeeOutlivesAyBeeYooWhereIsDebug<'a, 'b, T: 'a + 'b, U>(&'a &'b T, U) where U: Debug; //~^ ERROR outlives requirements can be inferred struct TeeWhereOutlivesAyYooWhereIsDebug<'a, T, U>(&'a T, U) where T: 'a, U: Debug; //~^ ERROR outlives requirements can be inferred struct TeeWhereAyBeeYooWhereIsDebug<'a, 'b, T, U>(&'a &'b T, U) where T: 'a + 'b, U: Debug; //~^ ERROR outlives requirements can be inferred struct BeeOutlivesAy<'a, 'b: 'a>(&'a &'b ()); //~^ ERROR outlives requirements can be inferred struct BeeWhereOutlivesAy<'a, 'b>(&'a &'b ()) where 'b: 'a; //~^ ERROR outlives requirements can be inferred struct BeeOutlivesAyTee<'a, 'b: 'a, T>(&'a &'b T); //~^ ERROR outlives requirements can be inferred struct BeeWhereOutlivesAyTee<'a, 'b, T>(&'a &'b T) where 'b: 'a; //~^ ERROR outlives requirements can be inferred struct BeeWhereOutlivesAyTeeWhereBee<'a, 'b, T>(&'a &'b T) where 'b: 'a, T: 'b; //~^ ERROR outlives requirements can be inferred struct BeeWhereOutlivesAyTeeWhereAyBee<'a, 'b, T>(&'a &'b T) where 'b: 'a, T: 'a + 'b; //~^ ERROR outlives requirements can be inferred struct BeeOutlivesAyTeeDebug<'a, 'b: 'a, T: Debug>(&'a &'b T); //~^ ERROR outlives requirements can be inferred struct BeeWhereOutlivesAyTeeWhereDebug<'a, 'b, T>(&'a &'b T) where 'b: 'a, T: Debug; //~^ ERROR outlives requirements can be inferred } mod enums { use std::fmt::Debug; enum TeeOutlivesAy<'a, T: 'a> { //~^ ERROR outlives requirements can be inferred V { tee: &'a T }, } enum TeeOutlivesAyIsDebug<'a, T: 'a + Debug> { //~^ ERROR outlives requirements can be inferred V(&'a T), } enum TeeIsDebugOutlivesAy<'a, T: Debug + 'a> { //~^ ERROR outlives requirements can be inferred V { tee: &'a T }, W, } enum TeeOutlivesAyBee<'a, 'b, T: 'a + 'b> { //~^ ERROR outlives requirements can be inferred V(&'a &'b T), W, } enum TeeOutlivesAyBeeIsDebug<'a, 'b, T: 'a + 'b + Debug> { //~^ ERROR outlives requirements can be inferred V { tee: &'a &'b T }, } enum TeeIsDebugOutlivesAyBee<'a, 'b, T: Debug + 'a + 'b> { //~^ ERROR outlives requirements can be inferred V(&'a &'b T), } enum TeeWhereOutlivesAy<'a, T> where T: 'a { //~^ ERROR outlives requirements can be inferred V { tee: &'a T }, W, } enum TeeWhereOutlivesAyIsDebug<'a, T> where T: 'a + Debug { //~^ ERROR outlives requirements can be inferred V(&'a T), W, } enum TeeWhereIsDebugOutlivesAy<'a, T> where T: Debug + 'a { //~^ ERROR outlives requirements can be inferred V { tee: &'a T }, } enum TeeWhereOutlivesAyBee<'a, 'b, T> where T: 'a + 'b { //~^ ERROR outlives requirements can be inferred V(&'a &'b T), } enum TeeWhereOutlivesAyBeeIsDebug<'a, 'b, T> where T: 'a + 'b + Debug { //~^ ERROR outlives requirements can be inferred V { tee: &'a &'b T }, W, } enum TeeWhereIsDebugOutlivesAyBee<'a, 'b, T> where T: Debug + 'a + 'b { //~^ ERROR outlives requirements can be inferred V(&'a &'b T), W, } enum TeeYooOutlivesAy<'a, T, U: 'a> { //~^ ERROR outlives requirements can be inferred V { tee: T }, W(&'a U), } enum TeeYooOutlivesAyIsDebug<'a, T, U: 'a + Debug> { //~^ ERROR outlives requirements can be inferred V { tee: T, yoo: &'a U }, W, } enum TeeYooIsDebugOutlivesAy<'a, T, U: Debug + 'a> { //~^ ERROR outlives requirements can be inferred V(T, &'a U), W, } enum TeeOutlivesAyYooIsDebug<'a, T: 'a, U: Debug> { //~^ ERROR outlives requirements can be inferred V { tee: &'a T }, W(U), } enum TeeYooOutlivesAyBee<'a, 'b, T, U: 'a + 'b> { //~^ ERROR outlives requirements can be inferred V { tee: T, yoo: &'a &'b U }, W, } enum TeeYooOutlivesAyBeeIsDebug<'a, 'b, T, U: 'a + 'b + Debug> { //~^ ERROR outlives requirements can be inferred V(T, &'a &'b U), W, } enum TeeYooIsDebugOutlivesAyBee<'a, 'b, T, U: Debug + 'a + 'b> { //~^ ERROR outlives requirements can be inferred V { tee: T, yoo: &'a &'b U }, W, } enum TeeOutlivesAyBeeYooIsDebug<'a, 'b, T: 'a + 'b, U: Debug> { //~^ ERROR outlives requirements can be inferred V(&'a &'b T, U), W, } enum TeeYooWhereOutlivesAy<'a, T, U> where U: 'a { //~^ ERROR outlives requirements can be inferred V { tee: T }, W(&'a U), } enum TeeYooWhereOutlivesAyIsDebug<'a, T, U> where U: 'a + Debug { //~^ ERROR outlives requirements can be inferred V { tee: T, yoo: &'a U }, W, } enum TeeYooWhereIsDebugOutlivesAy<'a, T, U> where U: Debug + 'a { //~^ ERROR outlives requirements can be inferred V(T, &'a U), W, } enum TeeOutlivesAyYooWhereIsDebug<'a, T: 'a, U> where U: Debug { //~^ ERROR outlives requirements can be inferred V { tee: &'a T }, W(U), } enum TeeYooWhereOutlivesAyBee<'a, 'b, T, U> where U: 'a + 'b { //~^ ERROR outlives requirements can be inferred V { tee: T, yoo: &'a &'b U }, W, } enum TeeYooWhereOutlivesAyBeeIsDebug<'a, 'b, T, U> where U: 'a + 'b + Debug { //~^ ERROR outlives requirements can be inferred V(T, &'a &'b U), W, } enum TeeYooWhereIsDebugOutlivesAyBee<'a, 'b, T, U> where U: Debug + 'a + 'b { //~^ ERROR outlives requirements can be inferred V { tee: T }, W(&'a &'b U), } enum TeeOutlivesAyBeeYooWhereIsDebug<'a, 'b, T: 'a + 'b, U> where U: Debug { //~^ ERROR outlives requirements can be inferred V { tee: &'a &'b T, yoo: U }, W, } enum TeeWhereOutlivesAyYooWhereIsDebug<'a, T, U> where T: 'a, U: Debug { //~^ ERROR outlives requirements can be inferred V(&'a T, U), W, } enum TeeWhereOutlivesAyBeeYooWhereIsDebug<'a, 'b, T, U> where T: 'a + 'b, U: Debug { //~^ ERROR outlives requirements can be inferred V { tee: &'a &'b T }, W(U), } enum BeeOutlivesAy<'a, 'b: 'a> { //~^ ERROR outlives requirements can be inferred V { tee: &'a &'b () }, } enum BeeWhereOutlivesAy<'a, 'b> where 'b: 'a { //~^ ERROR outlives requirements can be inferred V(&'a &'b ()), } enum BeeOutlivesAyTee<'a, 'b: 'a, T> { //~^ ERROR outlives requirements can be inferred V { tee: &'a &'b T }, W, } enum BeeWhereOutlivesAyTee<'a, 'b, T> where 'b: 'a { //~^ ERROR outlives requirements can be inferred V(&'a &'b T), W, } enum BeeWhereOutlivesAyTeeWhereBee<'a, 'b, T> where 'b: 'a, T: 'b { //~^ ERROR outlives requirements can be inferred V(&'a &'b T), } enum BeeWhereOutlivesAyTeeWhereAyBee<'a, 'b, T> where 'b: 'a, T: 'a + 'b { //~^ ERROR outlives requirements can be inferred V(&'a &'b T), W, } enum BeeOutlivesAyTeeDebug<'a, 'b: 'a, T: Debug> { //~^ ERROR outlives requirements can be inferred V { tee: &'a &'b T }, } enum BeeWhereOutlivesAyTeeWhereDebug<'a, 'b, T> where 'b: 'a, T: Debug { //~^ ERROR outlives requirements can be inferred V(&'a &'b T), } } mod unions { use std::fmt::Debug; union TeeOutlivesAy<'a, T: 'a> { //~^ ERROR outlives requirements can be inferred tee: &'a T } union TeeOutlivesAyIsDebug<'a, T: 'a + Debug> { //~^ ERROR outlives requirements can be inferred tee: &'a T } union TeeIsDebugOutlivesAy<'a, T: Debug + 'a> { //~^ ERROR outlives requirements can be inferred tee: &'a T } union TeeOutlivesAyBee<'a, 'b, T: 'a + 'b> { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T } union TeeOutlivesAyBeeIsDebug<'a, 'b, T: 'a + 'b + Debug> { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T } union TeeIsDebugOutlivesAyBee<'a, 'b, T: Debug + 'a + 'b> { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T } union TeeWhereOutlivesAy<'a, T> where T: 'a { //~^ ERROR outlives requirements can be inferred tee: &'a T } union TeeWhereOutlivesAyIsDebug<'a, T> where T: 'a + Debug { //~^ ERROR outlives requirements can be inferred tee: &'a T } union TeeWhereIsDebugOutlivesAy<'a, T> where T: Debug + 'a { //~^ ERROR outlives requirements can be inferred tee: &'a T } union TeeWhereOutlivesAyBee<'a, 'b, T> where T: 'a + 'b { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T } union TeeWhereOutlivesAyBeeIsDebug<'a, 'b, T> where T: 'a + 'b + Debug { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T } union TeeWhereIsDebugOutlivesAyBee<'a, 'b, T> where T: Debug + 'a + 'b { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T } union TeeYooOutlivesAy<'a, T, U: 'a> { //~^ ERROR outlives requirements can be inferred tee: *const T, yoo: &'a U } union TeeYooOutlivesAyIsDebug<'a, T, U: 'a + Debug> { //~^ ERROR outlives requirements can be inferred tee: *const T, yoo: &'a U } union TeeYooIsDebugOutlivesAy<'a, T, U: Debug + 'a> { //~^ ERROR outlives requirements can be inferred tee: *const T, yoo: &'a U } union TeeOutlivesAyYooIsDebug<'a, T: 'a, U: Debug> { //~^ ERROR outlives requirements can be inferred tee: &'a T, yoo: *const U } union TeeYooOutlivesAyBee<'a, 'b, T, U: 'a + 'b> { //~^ ERROR outlives requirements can be inferred tee: *const T, yoo: &'a &'b U } union TeeYooOutlivesAyBeeIsDebug<'a, 'b, T, U: 'a + 'b + Debug> { //~^ ERROR outlives requirements can be inferred tee: *const T, yoo: &'a &'b U } union TeeYooIsDebugOutlivesAyBee<'a, 'b, T, U: Debug + 'a + 'b> { //~^ ERROR outlives requirements can be inferred tee: *const T, yoo: &'a &'b U } union TeeOutlivesAyBeeYooIsDebug<'a, 'b, T: 'a + 'b, U: Debug> { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T, yoo: *const U } union TeeYooWhereOutlivesAy<'a, T, U> where U: 'a { //~^ ERROR outlives requirements can be inferred tee: *const T, yoo: &'a U } union TeeYooWhereOutlivesAyIsDebug<'a, T, U> where U: 'a + Debug { //~^ ERROR outlives requirements can be inferred tee: *const T, yoo: &'a U } union TeeYooWhereIsDebugOutlivesAy<'a, T, U> where U: Debug + 'a { //~^ ERROR outlives requirements can be inferred tee: *const T, yoo: &'a U } union TeeOutlivesAyYooWhereIsDebug<'a, T: 'a, U> where U: Debug { //~^ ERROR outlives requirements can be inferred tee: &'a T, yoo: *const U } union TeeYooWhereOutlivesAyBee<'a, 'b, T, U> where U: 'a + 'b { //~^ ERROR outlives requirements can be inferred tee: *const T, yoo: &'a &'b U } union TeeYooWhereOutlivesAyBeeIsDebug<'a, 'b, T, U> where U: 'a + 'b + Debug { //~^ ERROR outlives requirements can be inferred tee: *const T, yoo: &'a &'b U } union TeeYooWhereIsDebugOutlivesAyBee<'a, 'b, T, U> where U: Debug + 'a + 'b { //~^ ERROR outlives requirements can be inferred tee: *const T, yoo: &'a &'b U } union TeeOutlivesAyBeeYooWhereIsDebug<'a, 'b, T: 'a + 'b, U> where U: Debug { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T, yoo: *const U } union TeeWhereOutlivesAyYooWhereIsDebug<'a, T, U> where T: 'a, U: Debug { //~^ ERROR outlives requirements can be inferred tee: &'a T, yoo: *const U } union TeeWhereOutlivesAyBeeYooWhereIsDebug<'a, 'b, T, U> where T: 'a + 'b, U: Debug { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T, yoo: *const U } union BeeOutlivesAy<'a, 'b: 'a> { //~^ ERROR outlives requirements can be inferred tee: &'a &'b (), } union BeeWhereOutlivesAy<'a, 'b> where 'b: 'a { //~^ ERROR outlives requirements can be inferred tee: &'a &'b (), } union BeeOutlivesAyTee<'a, 'b: 'a, T> { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T, } union BeeWhereOutlivesAyTee<'a, 'b, T> where 'b: 'a { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T, } union BeeWhereOutlivesAyTeeWhereBee<'a, 'b, T> where 'b: 'a, T: 'b { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T, } union BeeWhereOutlivesAyTeeWhereAyBee<'a, 'b, T> where 'b: 'a, T: 'a + 'b { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T, } union BeeOutlivesAyTeeDebug<'a, 'b: 'a, T: Debug> { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T, } union BeeWhereOutlivesAyTeeWhereDebug<'a, 'b, T> where 'b: 'a, T: Debug { //~^ ERROR outlives requirements can be inferred tee: &'a &'b T, } } // But outlives inference for 'static lifetimes is under a separate // feature-gate for now // (https://github.com/rust-lang/rust/issues/44493#issuecomment-407846046). struct StaticRef { field: &'static T } struct TrailingCommaInWhereClause<'a, T, U> where T: 'a, U: 'a, //~^ ERROR outlives requirements can be inferred { tee: T, yoo: &'a U } // https://github.com/rust-lang/rust/issues/105150 struct InferredWhereBoundWithInlineBound<'a, T: ?Sized> //~^ ERROR outlives requirements can be inferred where T: 'a, { data: &'a T, } fn main() {}