1 // Copyright 2018 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
14 #![deny(explicit_outlives_requirements)]
16 use std::fmt::{Debug, Display};
19 // Programmatically generated examples!
21 // Exercise outlives bounds for each of the following parameter/position
24 // • one generic parameter (T) bound inline
25 // • one parameter (T) with a where clause
26 // • two parameters (T and U), both bound inline
27 // • two parameters (T and U), one bound inline, one with a where clause
28 // • two parameters (T and U), both with where clauses
30 // —and for every permutation of 0, 1, or 2 lifetimes to outlive and 0 or 1
31 // trait bounds distributed among said parameters (subject to no where clause
32 // being empty and the struct having at least one lifetime).
35 struct TeeOutlivesAy<'a, T> {
36 //~^ ERROR outlives requirements can be inferred
40 struct TeeOutlivesAyIsDebug<'a, T: Debug> {
41 //~^ ERROR outlives requirements can be inferred
45 struct TeeIsDebugOutlivesAy<'a, T: Debug> {
46 //~^ ERROR outlives requirements can be inferred
50 struct TeeOutlivesAyBee<'a, 'b, T> {
51 //~^ ERROR outlives requirements can be inferred
55 struct TeeOutlivesAyBeeIsDebug<'a, 'b, T: Debug> {
56 //~^ ERROR outlives requirements can be inferred
60 struct TeeIsDebugOutlivesAyBee<'a, 'b, T: Debug> {
61 //~^ ERROR outlives requirements can be inferred
65 struct TeeWhereOutlivesAy<'a, T> {
66 //~^ ERROR outlives requirements can be inferred
70 struct TeeWhereOutlivesAyIsDebug<'a, T> where T: Debug {
71 //~^ ERROR outlives requirements can be inferred
75 struct TeeWhereIsDebugOutlivesAy<'a, T> where T: Debug {
76 //~^ ERROR outlives requirements can be inferred
80 struct TeeWhereOutlivesAyBee<'a, 'b, T> {
81 //~^ ERROR outlives requirements can be inferred
85 struct TeeWhereOutlivesAyBeeIsDebug<'a, 'b, T> where T: Debug {
86 //~^ ERROR outlives requirements can be inferred
90 struct TeeWhereIsDebugOutlivesAyBee<'a, 'b, T> where T: Debug {
91 //~^ ERROR outlives requirements can be inferred
95 struct TeeYooOutlivesAy<'a, T, U> {
96 //~^ ERROR outlives requirements can be inferred
101 struct TeeYooOutlivesAyIsDebug<'a, T, U: Debug> {
102 //~^ ERROR outlives requirements can be inferred
107 struct TeeYooIsDebugOutlivesAy<'a, T, U: Debug> {
108 //~^ ERROR outlives requirements can be inferred
113 struct TeeOutlivesAyYooIsDebug<'a, T, U: Debug> {
114 //~^ ERROR outlives requirements can be inferred
119 struct TeeYooOutlivesAyBee<'a, 'b, T, U> {
120 //~^ ERROR outlives requirements can be inferred
125 struct TeeYooOutlivesAyBeeIsDebug<'a, 'b, T, U: Debug> {
126 //~^ ERROR outlives requirements can be inferred
131 struct TeeYooIsDebugOutlivesAyBee<'a, 'b, T, U: Debug> {
132 //~^ ERROR outlives requirements can be inferred
137 struct TeeOutlivesAyBeeYooIsDebug<'a, 'b, T, U: Debug> {
138 //~^ ERROR outlives requirements can be inferred
143 struct TeeYooWhereOutlivesAy<'a, T, U> {
144 //~^ ERROR outlives requirements can be inferred
149 struct TeeYooWhereOutlivesAyIsDebug<'a, T, U> where U: Debug {
150 //~^ ERROR outlives requirements can be inferred
155 struct TeeYooWhereIsDebugOutlivesAy<'a, T, U> where U: Debug {
156 //~^ ERROR outlives requirements can be inferred
161 struct TeeOutlivesAyYooWhereIsDebug<'a, T, U> where U: Debug {
162 //~^ ERROR outlives requirements can be inferred
167 struct TeeYooWhereOutlivesAyBee<'a, 'b, T, U> {
168 //~^ ERROR outlives requirements can be inferred
173 struct TeeYooWhereOutlivesAyBeeIsDebug<'a, 'b, T, U> where U: Debug {
174 //~^ ERROR outlives requirements can be inferred
179 struct TeeYooWhereIsDebugOutlivesAyBee<'a, 'b, T, U> where U: Debug {
180 //~^ ERROR outlives requirements can be inferred
185 struct TeeOutlivesAyBeeYooWhereIsDebug<'a, 'b, T, U> where U: Debug {
186 //~^ ERROR outlives requirements can be inferred
191 struct TeeWhereOutlivesAyYooWhereIsDebug<'a, T, U> where U: Debug {
192 //~^ ERROR outlives requirements can be inferred
197 struct TeeWhereOutlivesAyBeeYooWhereIsDebug<'a, 'b, T, U> where U: Debug {
198 //~^ ERROR outlives requirements can be inferred
204 // But outlives inference for 'static lifetimes is under a separate
205 // feature-gate for now
206 // (https://github.com/rust-lang/rust/issues/44493#issuecomment-407846046).
207 struct StaticRef<T: 'static> {