| //@ run-pass |
| //@ pretty-expanded FIXME #23616 |
| |
| #![allow(dead_code)] |
| |
| trait Foo { fn dummy(&self) { } } |
| impl Foo for isize {} |
| fn foo(_: [&dyn Foo; 2]) {} |
| fn foos(_: &[&dyn Foo]) {} |
| fn foog<T>(_: &[T], _: &[T]) {} |
| |
| fn bar(_: [Box<dyn Foo>; 2]) {} |
| fn bars(_: &[Box<dyn Foo+'static>]) {} |
| |
| fn main() { |
| let x: [&dyn Foo; 2] = [&1, &2]; |
| foo(x); |
| foo([&1, &2]); |
| |
| let r = &1; |
| let x: [&dyn Foo; 2] = [r; 2]; |
| foo(x); |
| foo([&1; 2]); |
| |
| let x: &[&dyn Foo] = &[&1, &2]; |
| foos(x); |
| foos(&[&1, &2]); |
| |
| let x: &[&dyn Foo] = &[&1, &2]; |
| let r = &1; |
| foog(x, &[r]); |
| |
| let x: [Box<dyn Foo>; 2] = [Box::new(1), Box::new(2)]; |
| bar(x); |
| bar([Box::new(1), Box::new(2)]); |
| |
| let x: &[Box<dyn Foo+'static>] = &[Box::new(1), Box::new(2)]; |
| bars(x); |
| bars(&[Box::new(1), Box::new(2)]); |
| |
| let x: &[Box<dyn Foo+'static>] = &[Box::new(1), Box::new(2)]; |
| foog(x, &[Box::new(1)]); |
| |
| struct T<'a> { |
| t: [&'a (dyn Foo+'a); 2] |
| } |
| let _n = T { |
| t: [&1, &2] |
| }; |
| let r = &1; |
| let _n = T { |
| t: [r; 2] |
| }; |
| let x: [&dyn Foo; 2] = [&1, &2]; |
| let _n = T { |
| t: x |
| }; |
| |
| struct F<'b> { |
| t: &'b [&'b (dyn Foo+'b)] |
| } |
| let _n = F { |
| t: &[&1, &2] |
| }; |
| let r = &1; |
| let r: [&dyn Foo; 2] = [r; 2]; |
| let _n = F { |
| t: &r |
| }; |
| let x: [&dyn Foo; 2] = [&1, &2]; |
| let _n = F { |
| t: &x |
| }; |
| |
| struct M<'a> { |
| t: &'a [Box<dyn Foo+'static>] |
| } |
| let _n = M { |
| t: &[Box::new(1), Box::new(2)] |
| }; |
| let x: [Box<dyn Foo>; 2] = [Box::new(1), Box::new(2)]; |
| let _n = M { |
| t: &x |
| }; |
| } |