| //@ run-pass |
| // All 3 expressions should work in that the argument gets |
| // coerced to a trait object |
| |
| //@ pretty-expanded FIXME #23616 |
| |
| fn main() { |
| send::<Box<dyn Foo>>(Box::new(Output(0))); |
| Test::<Box<dyn Foo>>::foo(Box::new(Output(0))); |
| Test::<Box<dyn Foo>>::new().send(Box::new(Output(0))); |
| } |
| |
| fn send<T>(_: T) {} |
| |
| struct Test<T> { marker: std::marker::PhantomData<T> } |
| impl<T> Test<T> { |
| fn new() -> Test<T> { Test { marker: ::std::marker::PhantomData } } |
| fn foo(_: T) {} |
| fn send(&self, _: T) {} |
| } |
| |
| trait Foo { fn dummy(&self) { }} //~ WARN method `dummy` is never used |
| struct Output(#[allow(dead_code)] isize); |
| impl Foo for Output {} |