pub fn normalize_projection_term<'a, 'b, 'tcx>(
    selcx: &'a mut SelectionContext<'b, 'tcx>,
    param_env: ParamEnv<'tcx>,
    alias_term: AliasTerm<'tcx>,
    cause: ObligationCause<'tcx>,
    depth: usize,
    obligations: &mut PredicateObligations<'tcx>,
) -> Term<'tcx>Expand description
The guts of normalize: normalize a specific projection like <T as Trait>::Item. The result is always a type (and possibly
additional obligations). If ambiguity arises, which implies that
there are unresolved type variables in the projection, we will
instantiate it with a fresh type variable $X and generate a new
obligation <T as Trait>::Item == $X for later.