pub fn enter_canonical_trait_query<K, R>(
        &'tcx mut self,
        canonical_key: &Canonical<'tcx, K>,
        operation: impl FnOnce(&InferCtxt<'_, 'gcx, 'tcx>, &mut FulfillmentContext<'tcx>, K)
            -> Fallible<R>,
    ) -> Fallible<CanonicalizedQueryResult<'gcx, R>>
    where
        K: TypeFoldable<'tcx>,
        R: Debug + Lift<'gcx> + TypeFoldable<'tcx>,
    {
        self.enter(|ref infcx| {
            let (key, canonical_inference_vars) =
                infcx.instantiate_canonical_with_fresh_inference_vars(DUMMY_SP, &canonical_key);
            let fulfill_cx = &mut FulfillmentContext::new();
            let value = operation(infcx, fulfill_cx, key)?;
            infcx.make_canonicalized_query_result(canonical_inference_vars, value, fulfill_cx)
        })
    }
/// The "main method" for a canonicalized trait query. Given the
/// canonical key `canonical_key`, this method will create a new
/// inference context, instantiate the key, and run your operation
/// `op`. The operation should yield up a result (of type `R`) as
/// well as a set of trait obligations that must be fully
/// satisfied. These obligations will be processed and the
/// canonical result created.
///
/// Returns `NoSolution` in the event of any error.
///
/// (It might be mildly nicer to implement this on `TyCtxt`, and
/// not `InferCtxtBuilder`, but that is a bit tricky right now.
/// In part because we would need a `for<'gcx: 'tcx>` sort of
/// bound for the closure and in part because it is convenient to
/// have `'tcx` be free on this function so that we can talk about
/// `K: TypeFoldable<'tcx>`.)
The "main method" for a canonicalized trait query. Given the
canonical key `canonical_key`, this method will create a new
inference context, instantiate the key, and run your operation
`op`. The operation should yield up a result (of type `R`) as
well as a set of trait obligations that must be fully
satisfied. These obligations will be processed and the
canonical result created.

Returns `NoSolution` in the event of any error.

(It might be mildly nicer to implement this on `TyCtxt`, and
not `InferCtxtBuilder`, but that is a bit tricky right now.
The " main method " for a canonicalized trait query . Given the canonical key ` canonical_key ` this method will create a new inference context instantiate the key and run your operation ` op ` . The operation should yield up a result ( of type ` R ` ) as well as a set of trait obligations that must be fully satisfied . These obligations will be processed and the canonical result created . Returns ` NoSolution ` in the event of any error . ( It might be mildly nicer to implement this on ` TyCtxt ` and not ` InferCtxtBuilder ` but that is a bit tricky right now .
pub fn enter_canonical_trait_query<K, R>(
        &'tcx mut self,
        canonical_key: &Canonical<'tcx, K>,
        operation: impl FnOnce(&InferCtxt<'_, 'gcx, 'tcx>, &mut FulfillmentContext<'tcx>, K)
            -> Fallible<R>,
    ) -> Fallible<CanonicalizedQueryResult<'gcx, R>>
    where
        K: TypeFoldable<'tcx>,
        R: Debug + Lift<'gcx> + TypeFoldable<'tcx>,
    {
        self.enter(|ref infcx| {
            let (key, canonical_inference_vars) =
                infcx.instantiate_canonical_with_fresh_inference_vars(DUMMY_SP, &canonical_key);
            let fulfill_cx = &mut FulfillmentContext::new();
            let value = operation(infcx, fulfill_cx, key)?;
            infcx.make_canonicalized_query_result(canonical_inference_vars, value, fulfill_cx)
        })
    }
pub fn enter_canonical_trait_query < K , R > ( & ' tcx mut self , canonical_key : & Canonical < ' tcx , K > , operation : impl FnOnce ( & InferCtxt < ' _ , ' gcx , ' tcx > , & mut FulfillmentContext < ' tcx > , K ) -> Fallible < R > , ) -> Fallible < CanonicalizedQueryResult < ' gcx , R > > where K : TypeFoldable < ' tcx > , R : Debug + Lift < ' gcx > + TypeFoldable < ' tcx > , { self . enter ( | ref infcx | { let ( key , canonical_inference_vars ) = infcx . instantiate_canonical_with_fresh_inference_vars ( DUMMY_SP , & canonical_key ) ; let fulfill_cx = & mut FulfillmentContext :: new ( ) ; let value = operation ( infcx , fulfill_cx , key ) ? ; infcx . make_canonicalized_query_result ( canonical_inference_vars , value , fulfill_cx ) } ) }
The "main method" for a canonicalized trait query.
The " main method " for a canonicalized trait query .
&'tcx mut self
canonical_key
&Canonical<'tcx, K>
operation
impl FnOnce(&InferCtxt<'_, 'gcx, 'tcx>, &mut FulfillmentContext<'tcx>, K)
            -> Fallible<R>