blob: 92fa4c7c21e72d84eece06829af306f34b77fe98 [file] [log] [blame] [view]
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