diff options
| author | toidiu <toidiu@protonmail.com> | 2018-04-18 22:26:21 -0400 |
|---|---|---|
| committer | toidiu <apoorv@toidiu.com> | 2018-05-25 09:58:00 -0400 |
| commit | 3da712381d0d264e31dcfaf9b29bbe8d4a8d1474 (patch) | |
| tree | 3168a9993ed19ecd3a73336f642c4ff4c97c6f69 /src/doc | |
| parent | b86d909f8635f82710c1bf74647c957051cbb23a (diff) | |
| download | rust-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.md | 67 |
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 +``` |
