fn confirm_impl_vtable(&mut self,
                           impl_def_id: ast::DefId,
                           obligation_cause: ObligationCause<'tcx>,
                           obligation_trait_ref: Rc<ty::TraitRef<'tcx>>,
                           substs: &Substs<'tcx>)
                           -> Result<(), SelectionError<'tcx>>
    {
        let impl_trait_ref = ty::impl_trait_ref(self.tcx(),
                                                impl_def_id).unwrap();
        let impl_trait_ref = impl_trait_ref.subst(self.tcx(),
                                                  substs);
        self.confirm(obligation_cause, obligation_trait_ref, impl_trait_ref)
    }
/// Relates the output type parameters from an impl to the
/// trait.  This may lead to type errors. The confirmation step
/// is separated from the main match procedure because these
/// type errors do not cause us to select another impl.
///
/// As an example, consider matching the obligation
/// `Iterator<char> for Elems<int>` using the following impl:
///
///    impl<T> Iterator<T> for Elems<T> { ... }
///
/// The match phase will succeed with substitution `T=int`.
/// The confirm step will then try to unify `int` and `char`
/// and yield an error.
Relates the output type parameters from an impl to the
trait.  This may lead to type errors. The confirmation step
is separated from the main match procedure because these
type errors do not cause us to select another impl.

As an example, consider matching the obligation
`Iterator for Elems` using the following impl.

impl Iterator for Elems { ...

The match phase will succeed with substitution `T=int`.
The confirm step will then try to unify `int` and `char`
and yield an error.
Relates the output type parameters from an impl to the trait . This may lead to type errors . The confirmation step is separated from the main match procedure because these type errors do not cause us to select another impl . As an example consider matching the obligation ` Iterator for Elems ` using the following impl . impl Iterator for Elems { ... The match phase will succeed with substitution ` T = int ` . The confirm step will then try to unify ` int ` and ` char ` and yield an error .
fn confirm_impl_vtable(&mut self,
                           impl_def_id: ast::DefId,
                           obligation_cause: ObligationCause<'tcx>,
                           obligation_trait_ref: Rc<ty::TraitRef<'tcx>>,
                           substs: &Substs<'tcx>)
                           -> Result<(), SelectionError<'tcx>>
    {
        let impl_trait_ref = ty::impl_trait_ref(self.tcx(),
                                                impl_def_id).unwrap();
        let impl_trait_ref = impl_trait_ref.subst(self.tcx(),
                                                  substs);
        self.confirm(obligation_cause, obligation_trait_ref, impl_trait_ref)
    }
fn confirm_impl_vtable ( & mut self , impl_def_id : ast :: DefId , obligation_cause : ObligationCause < ' tcx > , obligation_trait_ref : Rc < ty :: TraitRef < ' tcx > > , substs : & Substs < ' tcx > ) -> Result < ( ) , SelectionError < ' tcx > > { let impl_trait_ref = ty :: impl_trait_ref ( self . tcx ( ) , impl_def_id ) . unwrap ( ) ; let impl_trait_ref = impl_trait_ref . subst ( self . tcx ( ) , substs ) ; self . confirm ( obligation_cause , obligation_trait_ref , impl_trait_ref ) }
Relates the output type parameters from an impl to the
trait.
Relates the output type parameters from an impl to the trait .
&mut self
impl_def_id
ast::DefId
obligation_cause
ObligationCause<'tcx>
obligation_trait_ref
Rc<ty::TraitRef<'tcx>>
substs
&Substs<'tcx>