Enum rustc::ty::wf::Elaborate [−][src]
enum Elaborate { All, None, }
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Controls whether we "elaborate" supertraits and so forth on the WF predicates. This is a kind of hack to address #43784. The underlying problem in that issue was a trait structure like:
trait Foo: Copy { } trait Bar: Foo { } impl<T: Bar> Foo for T { } impl<T> Bar for T { }
Here, in the Foo
impl, we will check that T: Copy
holds -- but
we decide that this is true because T: Bar
is in the
where-clauses (and we can elaborate that to include T: Copy
). This wouldn't be a problem, except that when we check the
Bar
impl, we decide that T: Foo
must hold because of the Foo
impl. And so nowhere did we check that T: Copy
holds!
To resolve this, we elaborate the WF requirements that must be
proven when checking impls. This means that (e.g.) the impl Bar for T
will be forced to prove not only that T: Foo
but also T: Copy
(which it won't be able to do, because there is no Copy
impl for T
).
Variants
All
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
None
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Trait Implementations
impl Debug for Elaborate
[src]
impl Debug for Elaborate
fn fmt(&self, f: &mut Formatter) -> Result
[src]
fn fmt(&self, f: &mut Formatter) -> Result
Formats the value using the given formatter. Read more
impl PartialEq for Elaborate
[src]
impl PartialEq for Elaborate
fn eq(&self, other: &Elaborate) -> bool
[src]
fn eq(&self, other: &Elaborate) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
#[must_use]
fn ne(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]
fn ne(&self, other: &Rhs) -> bool
This method tests for !=
.
impl Eq for Elaborate
[src]
impl Eq for Elaborate
fn assert_receiver_is_total_eq(&self)
[src]
fn assert_receiver_is_total_eq(&self)
impl Copy for Elaborate
[src]
impl Copy for Elaborate
impl Clone for Elaborate
[src]
impl Clone for Elaborate