X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fdoc%2Funstable-book%2Fsrc%2Flibrary-features%2Ffn-traits.md;h=29a8aecee6c2fd26e5420a2c06640823e01b99fa;hb=760a98fb5e1c964efbe5cb36710fff892b547c51;hp=3942cda553889a0374d38aafada58cd688e81fe0;hpb=1a5284c32b1bd47da23c00fe5ab87ae009fd2eda;p=rust.git diff --git a/src/doc/unstable-book/src/library-features/fn-traits.md b/src/doc/unstable-book/src/library-features/fn-traits.md index 3942cda5538..29a8aecee6c 100644 --- a/src/doc/unstable-book/src/library-features/fn-traits.md +++ b/src/doc/unstable-book/src/library-features/fn-traits.md @@ -1,7 +1,35 @@ # `fn_traits` -The tracking issue for this feature is: [#29625] +The tracking issue for this feature is [#29625] + +See Also: [`unboxed_closures`](../language-features/unboxed-closures.md) [#29625]: https://github.com/rust-lang/rust/issues/29625 ------------------------- +---- + +The `fn_traits` feature allows for implementation of the [`Fn*`] traits +for creating custom closure-like types. + +[`Fn*`]: https://doc.rust-lang.org/std/ops/trait.Fn.html + +```rust +#![feature(unboxed_closures)] +#![feature(fn_traits)] + +struct Adder { + a: u32 +} + +impl FnOnce<(u32, )> for Adder { + type Output = u32; + extern "rust-call" fn call_once(self, b: (u32, )) -> Self::Output { + self.a + b.0 + } +} + +fn main() { + let adder = Adder { a: 3 }; + assert_eq!(adder(2), 5); +} +```