2018-02-18 18:40:35 +00:00
|
|
|
#![allow(dead_code, non_camel_case_types)]
|
2018-02-05 20:20:57 +00:00
|
|
|
|
2018-03-10 10:22:55 +00:00
|
|
|
// Test that bounds on higher-kinded lifetime binders are rejected.
|
2018-02-18 18:40:35 +00:00
|
|
|
|
|
|
|
fn bar1<'a, 'b>(
|
|
|
|
x: &'a i32,
|
|
|
|
y: &'b i32,
|
2018-03-06 10:22:24 +00:00
|
|
|
f: for<'xa, 'xb: 'xa+'xa> fn(&'xa i32, &'xb i32) -> &'xa i32)
|
|
|
|
//~^ ERROR lifetime bounds cannot be used in this context
|
2018-02-18 18:40:35 +00:00
|
|
|
{
|
|
|
|
// If the bound in f's type would matter, the call below would (have to)
|
|
|
|
// be rejected.
|
|
|
|
f(x, y);
|
2018-02-05 20:20:57 +00:00
|
|
|
}
|
|
|
|
|
2018-02-18 18:40:35 +00:00
|
|
|
fn bar2<'a, 'b, F: for<'xa, 'xb: 'xa> Fn(&'xa i32, &'xb i32) -> &'xa i32>(
|
2018-03-06 10:22:24 +00:00
|
|
|
//~^ ERROR lifetime bounds cannot be used in this context
|
2018-02-18 18:40:35 +00:00
|
|
|
x: &'a i32,
|
|
|
|
y: &'b i32,
|
|
|
|
f: F)
|
|
|
|
{
|
|
|
|
// If the bound in f's type would matter, the call below would (have to)
|
|
|
|
// be rejected.
|
|
|
|
f(x, y);
|
|
|
|
}
|
|
|
|
|
|
|
|
fn bar3<'a, 'b, F>(
|
|
|
|
x: &'a i32,
|
|
|
|
y: &'b i32,
|
|
|
|
f: F)
|
|
|
|
where F: for<'xa, 'xb: 'xa> Fn(&'xa i32, &'xb i32) -> &'xa i32
|
2018-03-06 10:22:24 +00:00
|
|
|
//~^ ERROR lifetime bounds cannot be used in this context
|
2018-02-18 18:40:35 +00:00
|
|
|
{
|
|
|
|
// If the bound in f's type would matter, the call below would (have to)
|
|
|
|
// be rejected.
|
|
|
|
f(x, y);
|
|
|
|
}
|
|
|
|
|
|
|
|
fn bar4<'a, 'b, F>(
|
|
|
|
x: &'a i32,
|
|
|
|
y: &'b i32,
|
|
|
|
f: F)
|
|
|
|
where for<'xa, 'xb: 'xa> F: Fn(&'xa i32, &'xb i32) -> &'xa i32
|
2018-03-06 10:22:24 +00:00
|
|
|
//~^ ERROR lifetime bounds cannot be used in this context
|
2018-02-18 18:40:35 +00:00
|
|
|
{
|
|
|
|
// If the bound in f's type would matter, the call below would (have to)
|
|
|
|
// be rejected.
|
|
|
|
f(x, y);
|
|
|
|
}
|
|
|
|
|
|
|
|
struct S1<F: for<'xa, 'xb: 'xa> Fn(&'xa i32, &'xb i32) -> &'xa i32>(F);
|
2018-03-06 10:22:24 +00:00
|
|
|
//~^ ERROR lifetime bounds cannot be used in this context
|
2018-02-18 18:40:35 +00:00
|
|
|
struct S2<F>(F) where F: for<'xa, 'xb: 'xa> Fn(&'xa i32, &'xb i32) -> &'xa i32;
|
2018-03-06 10:22:24 +00:00
|
|
|
//~^ ERROR lifetime bounds cannot be used in this context
|
2018-02-18 18:40:35 +00:00
|
|
|
struct S3<F>(F) where for<'xa, 'xb: 'xa> F: Fn(&'xa i32, &'xb i32) -> &'xa i32;
|
2018-03-06 10:22:24 +00:00
|
|
|
//~^ ERROR lifetime bounds cannot be used in this context
|
2018-02-18 18:40:35 +00:00
|
|
|
|
|
|
|
struct S_fnty(for<'xa, 'xb: 'xa> fn(&'xa i32, &'xb i32) -> &'xa i32);
|
2018-03-06 10:22:24 +00:00
|
|
|
//~^ ERROR lifetime bounds cannot be used in this context
|
2018-02-18 18:40:35 +00:00
|
|
|
|
2019-05-28 18:46:13 +00:00
|
|
|
type T1 = Box<dyn for<'xa, 'xb: 'xa> Fn(&'xa i32, &'xb i32) -> &'xa i32>;
|
2018-03-06 10:22:24 +00:00
|
|
|
//~^ ERROR lifetime bounds cannot be used in this context
|
2018-02-18 18:40:35 +00:00
|
|
|
|
2018-02-05 20:20:57 +00:00
|
|
|
fn main() {
|
2018-02-18 18:40:35 +00:00
|
|
|
let _ : Option<for<'xa, 'xb: 'xa> fn(&'xa i32, &'xb i32) -> &'xa i32> = None;
|
2018-03-06 10:22:24 +00:00
|
|
|
//~^ ERROR lifetime bounds cannot be used in this context
|
2019-05-28 18:46:13 +00:00
|
|
|
let _ : Option<Box<dyn for<'xa, 'xb: 'xa> Fn(&'xa i32, &'xb i32) -> &'xa i32>> = None;
|
2018-03-06 10:22:24 +00:00
|
|
|
//~^ ERROR lifetime bounds cannot be used in this context
|
2018-02-05 20:20:57 +00:00
|
|
|
}
|