fn assemble_candidates_from_object_ty<'cx, 'tcx>(
selcx: &mut SelectionContext<'cx, 'tcx>,
obligation: &Obligation<'tcx, ProjectionTy<'tcx>>,
candidate_set: &mut ProjectionCandidateSet<'tcx>
)
Expand description
In the case of a trait object like
<dyn Iterator<Item = ()> as Iterator>::Item
we can use the existential
predicate in the trait object.
We don’t go through the select candidate for these bounds to avoid cycles:
In the above case, dyn Iterator<Item = ()>: Iterator
would create a
nested obligation of <dyn Iterator<Item = ()> as Iterator>::Item: Sized
,
this then has to be normalized without having to prove
dyn Iterator<Item = ()>: Iterator
again.