Struct rustc_typeck::middle::ty::ProjectionPredicateUnstable [-] [+] [src]

pub struct ProjectionPredicate<'tcx> {
    pub projection_ty: ProjectionTy<'tcx>,
    pub ty: &'tcx TyS<'tcx>,
}

This kind of predicate has no direct correspondent in the syntax, but it roughly corresponds to the syntactic forms:

  1. T : TraitRef<..., Item=Type>
  2. <T as TraitRef<...>>::Item == Type (NYI)

In particular, form #1 is "desugared" to the combination of a normal trait predicate (T : TraitRef<...>) and one of these predicates. Form #2 is a broader form in that it also permits equality between arbitrary types. Processing an instance of Form

2 eventually yields one of these ProjectionPredicate

instances to normalize the LHS.

Fields

projection_ty
ty

Trait Implementations

impl<'tcx> RegionEscape for ProjectionPredicate<'tcx>

fn has_regions_escaping_depth(&self, depth: u32) -> bool

fn has_escaping_regions(&self) -> bool

impl<'tcx> Repr<'tcx> for ProjectionPredicate<'tcx>

fn repr(&self, tcx: &ctxt<'tcx>) -> String

impl<'tcx> HasProjectionTypes for ProjectionPredicate<'tcx>

fn has_projection_types(&self) -> bool

impl<'tcx> ReferencesError for ProjectionPredicate<'tcx>

fn references_error(&self) -> bool

impl<'tcx> TypeFoldable<'tcx> for ProjectionPredicate<'tcx>

fn fold_with<F>(&self, folder: &mut F) -> ProjectionPredicate<'tcx> where F: TypeFolder<'tcx>

impl<'a, 'tcx> Relate<'a, 'tcx> for ProjectionPredicate<'tcx> where 'tcx: 'a

fn relate<R>(relation: &mut R, a: &ProjectionPredicate<'tcx>, b: &ProjectionPredicate<'tcx>) -> Result<ProjectionPredicate<'tcx>, type_err<'tcx>> where R: TypeRelation<'a, 'tcx>

impl<'tcx> UserString<'tcx> for ProjectionPredicate<'tcx>

fn user_string(&self, tcx: &ctxt<'tcx>) -> String

Derived Implementations

impl<'tcx> Debug for ProjectionPredicate<'tcx>

fn fmt(&self, __arg_0: &mut Formatter) -> Result<(), Error>

impl<'tcx> Hash for ProjectionPredicate<'tcx>

fn hash<__H>(&self, __arg_0: &mut __H) where __H: Hasher

fn hash_slice<H>(data: &[Self], state: &mut H) where H: Hasher

impl<'tcx> Eq for ProjectionPredicate<'tcx>

impl<'tcx> PartialEq<ProjectionPredicate<'tcx>> for ProjectionPredicate<'tcx>

fn eq(&self, __arg_0: &ProjectionPredicate<'tcx>) -> bool

fn ne(&self, __arg_0: &ProjectionPredicate<'tcx>) -> bool

impl<'tcx> Clone for ProjectionPredicate<'tcx>

fn clone(&self) -> ProjectionPredicate<'tcx>

fn clone_from(&mut self, source: &Self)