pub(crate) fn update<'tcx, T>(
    engine: &mut T,
    infcx: &InferCtxt<'tcx>,
    obligation: &PredicateObligation<'tcx>
)where
    T: TraitEngine<'tcx>,