mirror of https://github.com/rust-lang/rust
70 lines
2.1 KiB
Rust
70 lines
2.1 KiB
Rust
#![allow(dead_code, non_camel_case_types)]
|
|
|
|
// Test that bounds on higher-kinded lifetime binders are rejected.
|
|
|
|
fn bar1<'a, 'b>(
|
|
x: &'a i32,
|
|
y: &'b i32,
|
|
f: for<'xa, 'xb: 'xa+'xa> fn(&'xa i32, &'xb i32) -> &'xa i32)
|
|
//~^ ERROR bounds cannot be used in this context
|
|
{
|
|
// If the bound in f's type would matter, the call below would (have to)
|
|
// be rejected.
|
|
f(x, y);
|
|
}
|
|
|
|
fn bar2<'a, 'b, F: for<'xa, 'xb: 'xa> Fn(&'xa i32, &'xb i32) -> &'xa i32>(
|
|
//~^ ERROR bounds cannot be used in this context
|
|
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
|
|
//~^ ERROR bounds cannot be used in this context
|
|
{
|
|
// 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
|
|
//~^ ERROR bounds cannot be used in this context
|
|
{
|
|
// 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);
|
|
//~^ ERROR bounds cannot be used in this context
|
|
struct S2<F>(F) where F: for<'xa, 'xb: 'xa> Fn(&'xa i32, &'xb i32) -> &'xa i32;
|
|
//~^ ERROR bounds cannot be used in this context
|
|
struct S3<F>(F) where for<'xa, 'xb: 'xa> F: Fn(&'xa i32, &'xb i32) -> &'xa i32;
|
|
//~^ ERROR bounds cannot be used in this context
|
|
|
|
struct S_fnty(for<'xa, 'xb: 'xa> fn(&'xa i32, &'xb i32) -> &'xa i32);
|
|
//~^ ERROR bounds cannot be used in this context
|
|
|
|
type T1 = Box<dyn for<'xa, 'xb: 'xa> Fn(&'xa i32, &'xb i32) -> &'xa i32>;
|
|
//~^ ERROR bounds cannot be used in this context
|
|
|
|
fn main() {
|
|
let _ : Option<for<'xa, 'xb: 'xa> fn(&'xa i32, &'xb i32) -> &'xa i32> = None;
|
|
//~^ ERROR bounds cannot be used in this context
|
|
let _ : Option<Box<dyn for<'xa, 'xb: 'xa> Fn(&'xa i32, &'xb i32) -> &'xa i32>> = None;
|
|
//~^ ERROR bounds cannot be used in this context
|
|
}
|