fn f<X:A,Y:B,Z:C>(x: &X, y: &Y, z: &Z) {
    assert_eq!(x.a(), 10);
    assert_eq!(y.a(), 10);
    assert_eq!(y.b(), 20);
    assert_eq!(z.a(), 10);
    assert_eq!(z.c(), 30);
}
// Multiple type params, multiple levels of inheritance
Multiple type params, multiple levels of inheritance
Multiple type params multiple levels of inheritance
fn f<X:A,Y:B,Z:C>(x: &X, y: &Y, z: &Z) {
    assert_eq!(x.a(), 10);
    assert_eq!(y.a(), 10);
    assert_eq!(y.b(), 20);
    assert_eq!(z.a(), 10);
    assert_eq!(z.c(), 30);
}
fn f < X : A , Y : B , Z : C > ( x : & X , y : & Y , z : & Z ) { assert_eq ! ( x a ( ) 10 ) ; assert_eq ! ( y a ( ) 10 ) ; assert_eq ! ( y b ( ) 20 ) ; assert_eq ! ( z a ( ) 10 ) ; assert_eq ! ( z c ( ) 30 ) ; }
Multiple type params, multiple levels of inheritance
Multiple type params multiple levels of inheritance
x
&X
y
&Y
z
&Z
x
&X
y
&Y
z
&Z