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.