2019-11-14 02:56:36 -06:00
|
|
|
#![feature(fn_traits, unboxed_closures)]
|
|
|
|
|
|
|
|
fn test<F: for<'x> FnOnce<(&'x str,)>>(_: F) {}
|
|
|
|
|
2021-02-09 16:59:32 -06:00
|
|
|
struct Compose<F, G>(F, G);
|
|
|
|
impl<T, F, G> FnOnce<(T,)> for Compose<F, G>
|
|
|
|
where
|
|
|
|
F: FnOnce<(T,)>,
|
|
|
|
G: FnOnce<(F::Output,)>,
|
|
|
|
{
|
2019-11-14 02:56:36 -06:00
|
|
|
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) {
|
2021-02-09 16:59:32 -06:00
|
|
|
test(Compose(f, |_| {}));
|
|
|
|
//~^ ERROR: implementation of `FnOnce` is not general enough
|
2019-11-14 02:56:36 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {}
|