3 #![feature(trait_upcasting)]
5 trait Foo: PartialEq<i32> + std::fmt::Debug + Send + Sync {
39 trait Baz: Bar1 + Bar2 {
70 let baz: &dyn Baz = &1;
71 let _: &dyn std::fmt::Debug = baz;
73 assert_eq!(baz.a(), 100);
74 assert_eq!(baz.b(), 200);
75 assert_eq!(baz.c(), 300);
76 assert_eq!(baz.d(), 400);
77 assert_eq!(baz.z(), 11);
78 assert_eq!(baz.y(), 12);
79 assert_eq!(baz.w(), 21);
80 assert_eq!(baz.v(), 31);
82 let bar1: &dyn Bar1 = baz;
83 let _: &dyn std::fmt::Debug = bar1;
85 assert_eq!(bar1.a(), 100);
86 assert_eq!(bar1.b(), 200);
87 assert_eq!(bar1.z(), 11);
88 assert_eq!(bar1.y(), 12);
89 assert_eq!(bar1.w(), 21);
91 let bar2: &dyn Bar2 = baz;
92 let _: &dyn std::fmt::Debug = bar2;
94 assert_eq!(bar2.a(), 100);
95 assert_eq!(bar2.c(), 300);
96 assert_eq!(bar2.z(), 11);
97 assert_eq!(bar2.y(), 12);
98 assert_eq!(bar2.v(), 31);
100 let foo: &dyn Foo = baz;
101 let _: &dyn std::fmt::Debug = foo;
103 assert_eq!(foo.a(), 100);
105 let foo: &dyn Foo = bar1;
106 let _: &dyn std::fmt::Debug = foo;
108 assert_eq!(foo.a(), 100);
110 let foo: &dyn Foo = bar2;
111 let _: &dyn std::fmt::Debug = foo;
113 assert_eq!(foo.a(), 100);