1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
//@ run-pass
#![allow(dead_code)]
#![allow(unused_variables)]
// Test what happens when a HR obligation is applied to an impl with
// "outlives" bounds. Currently we're pretty conservative here; this
// will probably improve in time.
trait Foo<X> {
fn foo(&self, x: X) { }
}
fn want_foo<T>()
where T : for<'a> Foo<&'a isize>
{
}
// Expressed as a where clause
struct SomeStruct<X> {
x: X
}
impl<'a,X> Foo<&'a isize> for SomeStruct<X>
where X : 'a
{
}
fn one() {
want_foo::<SomeStruct<usize>>();
}
// Expressed as shorthand
struct AnotherStruct<X> {
x: X
}
impl<'a,X:'a> Foo<&'a isize> for AnotherStruct<X>
{
}
fn two() {
want_foo::<AnotherStruct<usize>>();
}
fn main() { }
|