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
|
// check-pass
#![feature(associated_type_bounds)]
trait TraitA<'a> {
type AsA;
}
trait TraitB<'a, 'b> {
type AsB;
}
trait TraitC<'a, 'b, 'c> {}
struct X;
impl<'a, 'b, 'c> TraitC<'a, 'b, 'c> for X {}
struct Y;
impl<'a, 'b> TraitB<'a, 'b> for Y {
type AsB = X;
}
struct Z;
impl<'a> TraitA<'a> for Z {
type AsA = Y;
}
fn foo<T>()
where
for<'a> T: TraitA<'a, AsA: for<'b> TraitB<'a, 'b, AsB: for<'c> TraitC<'a, 'b, 'c>>>,
{
}
fn main() {
foo::<Z>();
}
|