about summary refs log tree commit diff
diff options
context:
space:
mode:
authortinaun <tinagma@gmail.com>2017-10-10 04:51:39 -0400
committertinaun <tinagma@gmail.com>2017-10-10 04:59:28 -0400
commitd07825258e2d5860442616ede39eb11ca3f8c9b6 (patch)
treec2d0b6e17fb34a0d8a56cb8e65cadd40f2e7a68b
parent364148dbf9d7a3e4a8e0c766ae3395f63fcb5a01 (diff)
downloadrust-d07825258e2d5860442616ede39eb11ca3f8c9b6.tar.gz
rust-d07825258e2d5860442616ede39eb11ca3f8c9b6.zip
unstable book: fn_traits
-rw-r--r--src/doc/unstable-book/src/language-features/optin-builtin-traits.md2
-rw-r--r--src/doc/unstable-book/src/library-features/fn-traits.md35
2 files changed, 36 insertions, 1 deletions
diff --git a/src/doc/unstable-book/src/language-features/optin-builtin-traits.md b/src/doc/unstable-book/src/language-features/optin-builtin-traits.md
index 9baa7eb3532..4ff46dedba1 100644
--- a/src/doc/unstable-book/src/language-features/optin-builtin-traits.md
+++ b/src/doc/unstable-book/src/language-features/optin-builtin-traits.md
@@ -15,7 +15,7 @@ has explictly opted out via a _negative impl_.
 [`Send`]: https://doc.rust-lang.org/std/marker/trait.Send.html
 [`Sync`]: https://doc.rust-lang.org/std/marker/trait.Sync.html
 
-```rust
+```rust, ignore
 impl !Type for Trait
 ```
 
diff --git a/src/doc/unstable-book/src/library-features/fn-traits.md b/src/doc/unstable-book/src/library-features/fn-traits.md
new file mode 100644
index 00000000000..d0f1fe8dc7c
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/fn-traits.md
@@ -0,0 +1,35 @@
+# `fn_traits`
+
+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);
+}
+```