about summary refs log tree commit diff
path: root/src/doc
diff options
context:
space:
mode:
authortoidiu <toidiu@protonmail.com>2018-04-18 22:26:21 -0400
committertoidiu <apoorv@toidiu.com>2018-05-25 09:58:00 -0400
commit3da712381d0d264e31dcfaf9b29bbe8d4a8d1474 (patch)
tree3168a9993ed19ecd3a73336f642c4ff4c97c6f69 /src/doc
parentb86d909f8635f82710c1bf74647c957051cbb23a (diff)
downloadrust-3da712381d0d264e31dcfaf9b29bbe8d4a8d1474.tar.gz
rust-3da712381d0d264e31dcfaf9b29bbe8d4a8d1474.zip
Implement outlives requirements inference for dyn and projections.
Add tests, documentation and attr for feature.
Diffstat (limited to 'src/doc')
-rw-r--r--src/doc/unstable-book/src/language-features/infer-outlives-requirements.md67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/doc/unstable-book/src/language-features/infer-outlives-requirements.md b/src/doc/unstable-book/src/language-features/infer-outlives-requirements.md
new file mode 100644
index 00000000000..73c7eafdb98
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/infer-outlives-requirements.md
@@ -0,0 +1,67 @@
+# `infer_outlives_requirements`
+
+The tracking issue for this feature is: [#44493]
+
+[#44493]: https://github.com/rust-lang/rust/issues/44493
+
+------------------------
+The `infer_outlives_requirements` feature indicates that certain
+outlives requirements can be infered by the compiler rather than
+stating them explicitly.
+
+For example, currently generic struct definitions that contain
+references, require where-clauses of the form T: 'a. By using
+this feature the outlives predicates will be infered, although
+they may still be written explicitly.
+
+```rust,ignore (pseudo-Rust)
+struct Foo<'a, T>
+  where T: 'a // <-- currently required
+  {
+      bar: &'a T,
+  }
+```
+
+
+## Examples:
+
+
+```rust,ignore (pseudo-Rust)
+#![feature(infer_outlives_requirements)]
+
+// Implicitly infer T: 'a
+struct Foo<'a, T> {
+    bar: &'a T,
+}
+```
+
+```rust,ignore (pseudo-Rust)
+#![feature(infer_outlives_requirements)]
+
+// Implicitly infer `U: 'b`
+struct Foo<'b, U> {
+    bar: Bar<'b, U>
+}
+
+struct Bar<'a, T> where T: 'a {
+    x: &'a (),
+    y: T,
+}
+```
+
+```rust,ignore (pseudo-Rust)
+#![feature(infer_outlives_requirements)]
+
+// Implicitly infer `b': 'a`
+struct Foo<'a, 'b, T> {
+    x: &'a &'b T
+}
+```
+
+```rust,ignore (pseudo-Rust)
+#![feature(infer_outlives_requirements)]
+
+// Implicitly infer `<T as std::iter::Iterator>::Item : 'a`
+struct Foo<'a, T: Iterator> {
+    bar: &'a T::Item
+```