diff options
Diffstat (limited to 'src/test/ui/unboxed-closures/issue-30906.rs')
-rw-r--r-- | src/test/ui/unboxed-closures/issue-30906.rs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/test/ui/unboxed-closures/issue-30906.rs b/src/test/ui/unboxed-closures/issue-30906.rs new file mode 100644 index 000000000..e2d219e47 --- /dev/null +++ b/src/test/ui/unboxed-closures/issue-30906.rs @@ -0,0 +1,22 @@ +#![feature(fn_traits, unboxed_closures)] + +fn test<F: for<'x> FnOnce<(&'x str,)>>(_: F) {} + +struct Compose<F, G>(F, G); +impl<T, F, G> FnOnce<(T,)> for Compose<F, G> +where + F: FnOnce<(T,)>, + G: FnOnce<(F::Output,)>, +{ + type Output = G::Output; + extern "rust-call" fn call_once(self, (x,): (T,)) -> G::Output { + (self.1)((self.0)(x)) + } +} + +fn bad<T>(f: fn(&'static str) -> T) { + test(Compose(f, |_| {})); + //~^ ERROR: implementation of `FnOnce` is not general enough +} + +fn main() {} |