[−][src]Function rustc::traits::project::opt_normalize_projection_type
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.