//@ 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>(); | |
} |