Struct rustc_infer::infer::region_constraints::VerifyIfEq
source · pub struct VerifyIfEq<'tcx> {
pub ty: Ty<'tcx>,
pub bound: Region<'tcx>,
}
Expand description
This is a “conditional bound” that checks the result of inference and supplies a bound if it ended up being relevant. It’s used in situations like this:
fn foo<'a, 'b, T: SomeTrait<'a>>
where
<T as SomeTrait<'a>>::Item: 'b
If we have an obligation like <T as SomeTrait<'?x>>::Item: 'c
, then
we don’t know yet whether it suffices to show that 'b: 'c
. If '?x
winds
up being equal to 'a
, then the where-clauses on function applies, and
in that case we can show 'b: 'c
. But if '?x
winds up being something
else, the bound isn’t relevant.
In the VerifyBound
, this struct is enclosed in Binder
to account
for cases like
where for<'a> <T as SomeTrait<'a>::Item: 'a
The idea is that we have to find some instantiation of 'a
that can
make <T as SomeTrait<'a>>::Item
equal to the final value of G
,
the generic we are checking.
fn(min) -> bool {
exists<'a> {
if G == K {
B(min)
} else {
false
}
}
}
Fields§
§ty: Ty<'tcx>
Type which must match the generic G
bound: Region<'tcx>
Bound that applies if ty
is equal.
Trait Implementations§
source§impl<'tcx> Clone for VerifyIfEq<'tcx>
impl<'tcx> Clone for VerifyIfEq<'tcx>
source§fn clone(&self) -> VerifyIfEq<'tcx>
fn clone(&self) -> VerifyIfEq<'tcx>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<'tcx> Debug for VerifyIfEq<'tcx>
impl<'tcx> Debug for VerifyIfEq<'tcx>
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for VerifyIfEq<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for VerifyIfEq<'tcx>
source§fn try_fold_with<__F: FallibleTypeFolder<TyCtxt<'tcx>>>(
self,
__folder: &mut __F
) -> Result<Self, __F::Error>
fn try_fold_with<__F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, __folder: &mut __F ) -> Result<Self, __F::Error>
source§fn fold_with<F>(self, folder: &mut F) -> Selfwhere
F: TypeFolder<I>,
fn fold_with<F>(self, folder: &mut F) -> Selfwhere F: TypeFolder<I>,
try_fold_with
for use with infallible
folders. Do not override this method, to ensure coherence with
try_fold_with
.source§impl<'tcx> TypeVisitable<TyCtxt<'tcx>> for VerifyIfEq<'tcx>
impl<'tcx> TypeVisitable<TyCtxt<'tcx>> for VerifyIfEq<'tcx>
source§fn visit_with<__V: TypeVisitor<TyCtxt<'tcx>>>(
&self,
__visitor: &mut __V
) -> ControlFlow<__V::BreakTy>
fn visit_with<__V: TypeVisitor<TyCtxt<'tcx>>>( &self, __visitor: &mut __V ) -> ControlFlow<__V::BreakTy>
impl<'tcx> Copy for VerifyIfEq<'tcx>
Auto Trait Implementations§
impl<'tcx> !RefUnwindSafe for VerifyIfEq<'tcx>
impl<'tcx> Send for VerifyIfEq<'tcx>
impl<'tcx> Sync for VerifyIfEq<'tcx>
impl<'tcx> Unpin for VerifyIfEq<'tcx>
impl<'tcx> !UnwindSafe for VerifyIfEq<'tcx>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 16 bytes