]> git.lizzy.rs Git - rust.git/blob - tests/ui/higher-lifetime-bounds.rs
Account for method call and indexing when looking for inner-most path in expression
[rust.git] / tests / ui / higher-lifetime-bounds.rs
1 #![allow(dead_code, non_camel_case_types)]
2
3 // Test that bounds on higher-kinded lifetime binders are rejected.
4
5 fn bar1<'a, 'b>(
6     x: &'a i32,
7     y: &'b i32,
8     f: for<'xa, 'xb: 'xa+'xa> fn(&'xa i32, &'xb i32) -> &'xa i32)
9     //~^ ERROR lifetime bounds cannot be used in this context
10 {
11     // If the bound in f's type would matter, the call below would (have to)
12     // be rejected.
13     f(x, y);
14 }
15
16 fn bar2<'a, 'b, F: for<'xa, 'xb: 'xa> Fn(&'xa i32, &'xb i32) -> &'xa i32>(
17     //~^ ERROR lifetime bounds cannot be used in this context
18     x: &'a i32,
19     y: &'b i32,
20     f: F)
21 {
22     // If the bound in f's type would matter, the call below would (have to)
23     // be rejected.
24     f(x, y);
25 }
26
27 fn bar3<'a, 'b, F>(
28     x: &'a i32,
29     y: &'b i32,
30     f: F)
31     where F: for<'xa, 'xb: 'xa> Fn(&'xa i32, &'xb i32) -> &'xa i32
32     //~^ ERROR lifetime bounds cannot be used in this context
33 {
34     // If the bound in f's type would matter, the call below would (have to)
35     // be rejected.
36     f(x, y);
37 }
38
39 fn bar4<'a, 'b, F>(
40     x: &'a i32,
41     y: &'b i32,
42     f: F)
43     where for<'xa, 'xb: 'xa> F: Fn(&'xa i32, &'xb i32) -> &'xa i32
44     //~^ ERROR lifetime bounds cannot be used in this context
45 {
46     // If the bound in f's type would matter, the call below would (have to)
47     // be rejected.
48     f(x, y);
49 }
50
51 struct S1<F: for<'xa, 'xb: 'xa> Fn(&'xa i32, &'xb i32) -> &'xa i32>(F);
52 //~^ ERROR lifetime bounds cannot be used in this context
53 struct S2<F>(F) where F: for<'xa, 'xb: 'xa> Fn(&'xa i32, &'xb i32) -> &'xa i32;
54 //~^ ERROR lifetime bounds cannot be used in this context
55 struct S3<F>(F) where for<'xa, 'xb: 'xa> F: Fn(&'xa i32, &'xb i32) -> &'xa i32;
56 //~^ ERROR lifetime bounds cannot be used in this context
57
58 struct S_fnty(for<'xa, 'xb: 'xa> fn(&'xa i32, &'xb i32) -> &'xa i32);
59 //~^ ERROR lifetime bounds cannot be used in this context
60
61 type T1 = Box<dyn for<'xa, 'xb: 'xa> Fn(&'xa i32, &'xb i32) -> &'xa i32>;
62 //~^ ERROR lifetime bounds cannot be used in this context
63
64 fn main() {
65     let _ : Option<for<'xa, 'xb: 'xa> fn(&'xa i32, &'xb i32) -> &'xa i32> = None;
66     //~^ ERROR lifetime bounds cannot be used in this context
67     let _ : Option<Box<dyn for<'xa, 'xb: 'xa> Fn(&'xa i32, &'xb i32) -> &'xa i32>> = None;
68     //~^ ERROR lifetime bounds cannot be used in this context
69 }