Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- trait FnLt<'a> {
- fn apply(self, input: &'a u8) -> &'a u8;
- }
- // Struct impl
- struct Foo;
- impl<'a> FnLt<'a> for Foo {
- fn apply(self, input: &'a u8) -> &'a u8 {
- input
- }
- }
- // Closure impl
- impl<'a, T> FnLt<'a> for T
- where
- T: FnOnce(&'a u8) -> &'a u8,
- {
- fn apply(self, input: &'a u8) -> &'a u8 {
- (self)(input)
- }
- }
- fn take_fn_lt(_: impl for<'a> FnLt<'a>) {}
- fn fix<F: FnOnce(&u8) -> &u8>(x: F) -> F {
- x
- }
- fn main() {
- take_fn_lt(Foo); // Works
- fn foo(x: &u8) -> &u8 { x }
- take_fn_lt(foo); // Works
- //take_fn_lt(|x: &u8| -> &u8 { x }); // Doesn't work
- take_fn_lt(fix(|x: &u8| -> &u8 { x })); // Doesn work
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement