# Enum rustc_trait_selection::traits::solve::GoalSource

source ·

    pub enum GoalSource {
        Misc,
        ImplWhereBound,
    }

Expand description

Why a specific goal has to be proven.

This is necessary as we treat nested goals different depending on their source.

## Variants§

§

### Misc

§

### ImplWhereBound

We’re proving a where-bound of an impl.

FIXME(-Znext-solver=coinductive): Explain how and why this changes whether cycles are coinductive.

This also impacts whether we erase constraints on overflow. Erasing constraints is generally very useful for perf and also results in better error messages by avoiding spurious errors. We do not erase overflow constraints in `normalizes-to` goals unless they are from an impl where-clause. This is necessary due to backwards compatability, cc trait-system-refactor-initiatitive#70.

## Auto Trait Implementations§

§

### impl RefUnwindSafe for GoalSource

§

### impl Send for GoalSource

§

### impl Sync for GoalSource

§

### impl Unpin for GoalSource

§

### impl UnwindSafe for GoalSource

## Blanket Implementations§

source§

### impl<T> Any for T
where T: 'static + ?Sized,

source§

#### fn type_id(&self) -> TypeId

Gets the `TypeId` of `self`. Read more
source§

### impl<T> Borrow<T> for T
where T: ?Sized,

source§

#### fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

### impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

#### fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

### impl<T> From<T> for T

source§

#### fn from(t: T) -> T

Returns the argument unchanged.

source§

### impl<T, U> Into<U> for T
where U: From<T>,

source§

#### fn into(self) -> U

Calls `U::from(self)`.

That is, this conversion is whatever the implementation of `From<T> for U` chooses to do.

source§

### impl<T> ToOwned for T
where T: Clone,

§

#### type Owned = T

The resulting type after obtaining ownership.
source§

#### fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

#### fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

### impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

#### type Error = Infallible

The type returned in the event of a conversion error.
source§

#### fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

### impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

#### type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

#### fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.

## 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: 1 byte

Size for each variant:

- `Misc`: 0 bytes
- `ImplWhereBound`: 0 bytes