Struct rustc_trait_selection::infer::region_constraints::VerifyIfEq
source · [−]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.
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
sourceimpl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
fn allocate_on(self, arena: &'a Arena<'tcx>) -> &'a mut T
fn allocate_from_iter(
arena: &'a Arena<'tcx>,
iter: impl IntoIterator<Item = T>
) -> &'a mut [T]ⓘNotable traits for &[u8]impl Read for &[u8]impl Write for &mut [u8]
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
sourceimpl<'tcx, T> IsSuggestable<'tcx> for Twhere
T: TypeVisitable<'tcx>,
impl<'tcx, T> IsSuggestable<'tcx> for Twhere
T: TypeVisitable<'tcx>,
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