[−][src]Struct rustc_trait_selection::opaque_types::OpaqueTypeDecl
Information about the opaque types whose values we
are inferring in this function (these are the impl Trait that
appear in the return type).
Fields
opaque_type: Ty<'tcx>The opaque type (ty::Opaque) for this declaration.
substs: SubstsRef<'tcx>The substitutions that we apply to the opaque type that this
impl Trait desugars to. e.g., if:
fn foo<'a, 'b, T>() -> impl Trait<'a>
winds up desugared to:
type Foo<'x, X> = impl Trait<'x> fn foo<'a, 'b, T>() -> Foo<'a, T>
then substs would be ['a, T].
definition_span: SpanThe span of this particular definition of the opaque type. So for example:
type Foo = impl Baz; fn bar() -> Foo { // ^^^ This is the span we are looking for!
In cases where the fn returns (impl Trait, impl Trait) or
other such combinations, the result is currently
over-approximated, but better than nothing.
concrete_ty: Ty<'tcx>The type variable that represents the value of the opaque type that we require. In other words, after we compile this function, we will be created a constraint like:
Foo<'a, T> = ?C
where ?C is the value of this type variable. =) It may
naturally refer to the type and lifetime parameters in scope
in this function, though ultimately it should only reference
those that are arguments to Foo in the constraint above. (In
other words, ?C should not include 'b, even though it's a
lifetime parameter on foo.)
has_required_region_bounds: boolReturns true if the impl Trait bounds include region bounds.
For example, this would be true for:
fn foo<'a, 'b, 'c>() -> impl Trait<'c> + 'a + 'b
but false for:
fn foo<'c>() -> impl Trait<'c>
unless Trait was declared like:
trait Trait<'c>: 'c
in which case it would be true.
This is used during regionck to decide whether we need to
impose any additional constraints to ensure that region
variables in concrete_ty wind up being constrained to
something from substs (or, at minimum, things that outlive
the fn body). (Ultimately, writeback is responsible for this
check.)
origin: OpaqueTyOriginThe origin of the opaque type.
Trait Implementations
impl<'tcx> Clone for OpaqueTypeDecl<'tcx>[src]
pub fn clone(&self) -> OpaqueTypeDecl<'tcx>[src]
pub fn clone_from(&mut self, source: &Self)1.0.0[src]
impl<'tcx> Copy for OpaqueTypeDecl<'tcx>[src]
impl<'tcx> Debug for OpaqueTypeDecl<'tcx>[src]
Auto Trait Implementations
impl<'tcx> !RefUnwindSafe for OpaqueTypeDecl<'tcx>
impl<'tcx> !Send for OpaqueTypeDecl<'tcx>
impl<'tcx> !Sync for OpaqueTypeDecl<'tcx>
impl<'tcx> Unpin for OpaqueTypeDecl<'tcx>
impl<'tcx> !UnwindSafe for OpaqueTypeDecl<'tcx>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<'tcx, T> ArenaAllocatable<'tcx, ()> for T where
T: Copy, [src]
T: Copy,
pub fn allocate_on(self, arena: &'a Arena<'tcx>) -> &'a mut T[src]
pub fn allocate_from_iter(
arena: &'a Arena<'tcx>,
iter: impl IntoIterator<Item = T>
) -> &'a mut [T][src]
arena: &'a Arena<'tcx>,
iter: impl IntoIterator<Item = T>
) -> &'a mut [T]
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T[src]
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone, [src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T[src]
pub fn clone_into(&self, target: &mut T)[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.