Enum rustc_infer::traits::ImplSource [−][src]
pub enum ImplSource<'tcx, N> {
UserDefined(ImplSourceUserDefinedData<'tcx, N>),
AutoImpl(ImplSourceAutoImplData<N>),
Param(Vec<N, Global>, Constness),
Object(ImplSourceObjectData<'tcx, N>),
Builtin(ImplSourceBuiltinData<N>),
Closure(ImplSourceClosureData<'tcx, N>),
FnPointer(ImplSourceFnPointerData<'tcx, N>),
DiscriminantKind(ImplSourceDiscriminantKindData),
Pointee(ImplSourcePointeeData),
Generator(ImplSourceGeneratorData<'tcx, N>),
TraitAlias(ImplSourceTraitAliasData<'tcx, N>),
}Expand description
Given the successful resolution of an obligation, the ImplSource
indicates where the impl comes from.
For example, the obligation may be satisfied by a specific impl (case A), or it may be relative to some bound that is in scope (case B).
impl<T:Clone> Clone<T> for Option<T> { ... } // Impl_1 impl<T:Clone> Clone<T> for Box<T> { ... } // Impl_2 impl Clone for i32 { ... } // Impl_3 fn foo<T: Clone>(concrete: Option<Box<i32>>, param: T, mixed: Option<T>) { // Case A: Vtable points at a specific impl. Only possible when // type is concretely known. If the impl itself has bounded // type parameters, Vtable will carry resolutions for those as well: concrete.clone(); // Vtable(Impl_1, [Vtable(Impl_2, [Vtable(Impl_3)])]) // Case A: ImplSource points at a specific impl. Only possible when // type is concretely known. If the impl itself has bounded // type parameters, ImplSource will carry resolutions for those as well: concrete.clone(); // ImplSource(Impl_1, [ImplSource(Impl_2, [ImplSource(Impl_3)])]) // Case B: ImplSource must be provided by caller. This applies when // type is a type parameter. param.clone(); // ImplSource::Param // Case C: A mix of cases A and B. mixed.clone(); // ImplSource(Impl_1, [ImplSource::Param]) }
The type parameter N
See explanation on ImplSourceUserDefinedData.
Variants
UserDefined(ImplSourceUserDefinedData<'tcx, N>)Expand description
ImplSource identifying a particular impl.
AutoImpl(ImplSourceAutoImplData<N>)Expand description
ImplSource for auto trait implementations.
This carries the information and nested obligations with regards
to an auto implementation for a trait Trait. The nested obligations
ensure the trait implementation holds for all the constituent types.
Expand description
Successful resolution to an obligation provided by the caller
for some type parameter. The Vec<N> represents the
obligations incurred from normalizing the where-clause (if
any).
Object(ImplSourceObjectData<'tcx, N>)Expand description
Virtual calls through an object.
Builtin(ImplSourceBuiltinData<N>)Expand description
Successful resolution for a builtin trait.
Closure(ImplSourceClosureData<'tcx, N>)Expand description
ImplSource automatically generated for a closure. The DefId is the ID
of the closure expression. This is a ImplSource::UserDefined in spirit, but the
impl is generated by the compiler and does not appear in the source.
FnPointer(ImplSourceFnPointerData<'tcx, N>)Expand description
Same as above, but for a function pointer type with the given signature.
DiscriminantKind(ImplSourceDiscriminantKindData)Expand description
ImplSource for a builtin DeterminantKind trait implementation.
Pointee(ImplSourcePointeeData)Expand description
ImplSource for a builtin Pointee trait implementation.
Generator(ImplSourceGeneratorData<'tcx, N>)Expand description
ImplSource automatically generated for a generator.
TraitAlias(ImplSourceTraitAliasData<'tcx, N>)Expand description
ImplSource for a trait alias.
Auto Trait Implementations
impl<'tcx, N> !RefUnwindSafe for ImplSource<'tcx, N>
impl<'tcx, N> !Send for ImplSource<'tcx, N>
impl<'tcx, N> !Sync for ImplSource<'tcx, N>
impl<'tcx, N> Unpin for ImplSource<'tcx, N> where
N: Unpin,
N: Unpin,
impl<'tcx, N> !UnwindSafe for ImplSource<'tcx, N>
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]pub fn borrow_mut(&mut self) -> &mut T[src]
pub fn borrow_mut(&mut self) -> &mut T[src]Mutably borrows from an owned value. Read more
impl<'tcx, T> Subst<'tcx> for T where
T: TypeFoldable<'tcx>, [src]
impl<'tcx, T> Subst<'tcx> for T where
T: TypeFoldable<'tcx>, [src]pub fn subst_spanned(
self,
tcx: TyCtxt<'tcx>,
substs: &[GenericArg<'tcx>],
span: Option<Span>
) -> T[src]
self,
tcx: TyCtxt<'tcx>,
substs: &[GenericArg<'tcx>],
span: Option<Span>
) -> T
fn subst(self, tcx: TyCtxt<'tcx>, substs: &[GenericArg<'tcx>]) -> Self[src]
impl<T> ToOwned for T where
T: Clone, [src]
impl<T> ToOwned for T where
T: Clone, [src]type Owned = T
type Owned = TThe resulting type after obtaining ownership.
pub fn to_owned(&self) -> T[src]
pub fn to_owned(&self) -> T[src]Creates owned data from borrowed data, usually by cloning. Read more
pub fn clone_into(&self, target: &mut T)[src]
pub fn clone_into(&self, target: &mut T)[src]🔬 This is a nightly-only experimental API. (toowned_clone_into)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more
impl<T> WithConstness for T[src]
impl<T> WithConstness for T[src]fn with_constness(self, constness: Constness) -> ConstnessAnd<Self>[src]
fn with_const(self) -> ConstnessAnd<Self>[src]
fn without_const(self) -> ConstnessAnd<Self>[src]
impl<'a, T> Captures<'a> for T where
T: ?Sized, [src]
T: ?Sized,