mirror of
https://github.com/rust-lang/rust
synced 2024-11-05 20:45:15 +00:00
812 lines
24 KiB
Rust
812 lines
24 KiB
Rust
//@ 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<T: 'static> {
|
|
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() {}
|