# `infer_outlives_requirements`

The tracking issue for this feature is: #44493

The `infer_outlives_requirements` feature indicates that certain outlives requirements can be inferred 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 inferred, although they may still be written explicitly.

    struct Foo<'a, T>
      where T: 'a // <-- currently required
      {
          bar: &'a T,
      }

## Examples:

    #![feature(infer_outlives_requirements)]

    // Implicitly infer T: 'a
    struct Foo<'a, T> {
        bar: &'a T,
    }

    #![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,
    }

    #![feature(infer_outlives_requirements)]

    // Implicitly infer `b': 'a`
    struct Foo<'a, 'b, T> {
        x: &'a &'b T
    }

    #![feature(infer_outlives_requirements)]

    // Implicitly infer `<T as std::iter::Iterator>::Item : 'a`
    struct Foo<'a, T: Iterator> {
        bar: &'a T::Item