| Manual implementation of a `Fn*` trait. |
| |
| Erroneous code example: |
| |
| ```compile_fail,E0183 |
| struct MyClosure { |
| foo: i32 |
| } |
| |
| impl FnOnce<()> for MyClosure { // error |
| type Output = (); |
| extern "rust-call" fn call_once(self, args: ()) -> Self::Output { |
| println!("{}", self.foo); |
| } |
| } |
| ``` |
| |
| Manually implementing `Fn`, `FnMut` or `FnOnce` is unstable |
| and requires `#![feature(fn_traits, unboxed_closures)]`. |
| |
| ``` |
| #![feature(fn_traits, unboxed_closures)] |
| |
| struct MyClosure { |
| foo: i32 |
| } |
| |
| impl FnOnce<()> for MyClosure { // ok! |
| type Output = (); |
| extern "rust-call" fn call_once(self, args: ()) -> Self::Output { |
| println!("{}", self.foo); |
| } |
| } |
| ``` |
| |
| The arguments must be a tuple representing the argument list. |
| For more info, see the [tracking issue][iss29625]: |
| |
| [iss29625]: https://github.com/rust-lang/rust/issues/29625 |