Struct rustc::infer::outlives::obligations::TypeOutlives[][src]

pub struct TypeOutlives<'cx, 'gcx: 'tcx, 'tcx: 'cx, D> where
    D: TypeOutlivesDelegate<'tcx>, 
{ delegate: D, tcx: TyCtxt<'cx, 'gcx, 'tcx>, region_bound_pairs: &'cx [(Region<'tcx>, GenericKind<'tcx>)], implicit_region_bound: Option<Region<'tcx>>, param_env: ParamEnv<'tcx>, }
🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

The TypeOutlives struct has the job of "lowering" a T: 'a obligation into a series of 'a: 'b constraints and "verifys", as described on the module comment. The final constraints are emitted via a "delegate" of type D -- this is usually the infcx, which accrues them into the region_obligations code, but for NLL we use something else.

Fields

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

Methods

impl<'cx, 'gcx, 'tcx, D> TypeOutlives<'cx, 'gcx, 'tcx, D> where
    D: TypeOutlivesDelegate<'tcx>, 
[src]

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

Adds constraints to inference such that T: 'a holds (or reports an error if it cannot).

Parameters

  • origin, the reason we need this constraint
  • ty, the type T
  • region, the region 'a

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

Important traits for Vec<u8>

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

Important traits for Vec<u8>

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

Important traits for Vec<u8>

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

Given a projection like <T as Foo<'x>>::Bar, returns any bounds declared in the trait definition. For example, if the trait were

trait Foo<'a> {
    type Bar: 'a;
}

then this function would return 'x. This is subject to the limitations around higher-ranked bounds described in region_bounds_declared_on_associated_item.

Important traits for Vec<u8>

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

Given the def-id of an associated item, returns any region bounds attached to that associated item from the trait definition.

For example:

trait Foo<'a> {
    type Bar: 'a;
}

If we were given the def-id of Foo::Bar, we would return 'a. You could then apply the substitutions from the projection to convert this into your namespace. This also works if the user writes where <Self as Foo<'a>>::Bar: 'a on the trait. In fact, it works by searching for just such a where-clause.

It will not, however, work for higher-ranked bounds like:

trait Foo<'a, 'b>
where for<'x> <Self as Foo<'x, 'b>>::Bar: 'x
{
    type Bar;
}

This is for simplicity, and because we are not really smart enough to cope with such bounds anywhere.

Important traits for Vec<u8>

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

Searches through a predicate list for a predicate T: 'a.

Careful: does not elaborate predicates, and just uses == when comparing ty for equality, so ty must be something that does not involve inference variables and where you otherwise want a precise match.

Auto Trait Implementations

impl<'cx, 'gcx, 'tcx, D> !Send for TypeOutlives<'cx, 'gcx, 'tcx, D>

impl<'cx, 'gcx, 'tcx, D> !Sync for TypeOutlives<'cx, 'gcx, 'tcx, D>