1 #![feature(unboxed_closures)]
4 fn a() where Self: Sized;
10 pub fn foo<F: FnOnce<()>>() where F::Output: A {
14 pub fn bar<F: FnOnce() -> R, R: ?Sized>() {}
16 pub fn baz<F: FnOnce<()>>() where F::Output: A, F::Output: Sized {
24 pub fn foo<F: Fn<()>>() where F::Output: A {
28 pub fn bar<F: Fn() -> R, R: ?Sized>() {}
30 pub fn baz<F: Fn<()>>() where F::Output: A, F::Output: Sized {
38 pub fn foo<F: FnMut<()>>() where F::Output: A {
42 pub fn bar<F: FnMut() -> R, R: ?Sized>() {}
44 pub fn baz<F: FnMut<()>>() where F::Output: A, F::Output: Sized {
49 impl A for Box<dyn A> {
54 a::foo::<fn() -> dyn A>(); //~ ERROR E0277
55 a::bar::<fn() -> dyn A, _>(); //~ ERROR E0277
56 a::baz::<fn() -> dyn A>(); //~ ERROR E0277
57 a::foo::<fn() -> Box<dyn A>>(); // ok
58 a::bar::<fn() -> Box<dyn A>, _>(); // ok
59 a::baz::<fn() -> Box<dyn A>>(); // ok
61 b::foo::<fn() -> dyn A>(); //~ ERROR E0277
62 b::bar::<fn() -> dyn A, _>(); //~ ERROR E0277
63 b::baz::<fn() -> dyn A>(); //~ ERROR E0277
64 b::foo::<fn() -> Box<dyn A>>(); // ok
65 b::bar::<fn() -> Box<dyn A>, _>(); // ok
66 b::baz::<fn() -> Box<dyn A>>(); // ok
68 c::foo::<fn() -> dyn A>(); //~ ERROR E0277
69 c::bar::<fn() -> dyn A, _>(); //~ ERROR E0277
70 c::baz::<fn() -> dyn A>(); //~ ERROR E0277
71 c::foo::<fn() -> Box<dyn A>>(); // ok
72 c::bar::<fn() -> Box<dyn A>, _>(); // ok
73 c::baz::<fn() -> Box<dyn A>>(); // ok