Function rustc::traits::project::opt_normalize_projection_type[][src]

fn opt_normalize_projection_type<'a, 'b, 'gcx, 'tcx>(
    selcx: &'a mut SelectionContext<'b, 'gcx, 'tcx>,
    param_env: ParamEnv<'tcx>,
    projection_ty: ProjectionTy<'tcx>,
    cause: ObligationCause<'tcx>,
    depth: usize,
    obligations: &mut Vec<PredicateObligation<'tcx>>
) -> Option<Ty<'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 guts of normalize: normalize a specific projection like <T as Trait>::Item. The result is always a type (and possibly additional obligations). Returns None in the case of ambiguity, which indicates that there are unbound type variables.

This function used to return Option<NormalizedTy<'tcx>>, which contains a Ty<'tcx> and an obligations vector. But that obligation vector was very often immediately appended to another obligations vector. So now this function takes an obligations vector and appends to it directly, which is slightly uglier but avoids the need for an extra short-lived allocation.