Rollup merge of #78793 - camelid:fixup-structuraleq, r=jyn514

Clean up `StructuralEq` docs
This commit is contained in:
Mara Bos 2020-11-22 23:01:00 +01:00 committed by GitHub
commit 8a623e6f98
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -156,18 +156,18 @@ pub trait StructuralPartialEq {
/// Required trait for constants used in pattern matches. /// Required trait for constants used in pattern matches.
/// ///
/// Any type that derives `Eq` automatically implements this trait, *regardless* /// Any type that derives `Eq` automatically implements this trait, *regardless*
/// of whether its type-parameters implement `Eq`. /// of whether its type parameters implement `Eq`.
/// ///
/// This is a hack to workaround a limitation in our type-system. /// This is a hack to work around a limitation in our type system.
/// ///
/// Background: /// # Background
/// ///
/// We want to require that types of consts used in pattern matches /// We want to require that types of consts used in pattern matches
/// have the attribute `#[derive(PartialEq, Eq)]`. /// have the attribute `#[derive(PartialEq, Eq)]`.
/// ///
/// In a more ideal world, we could check that requirement by just checking that /// In a more ideal world, we could check that requirement by just checking that
/// the given type implements both (1.) the `StructuralPartialEq` trait *and* /// the given type implements both the `StructuralPartialEq` trait *and*
/// (2.) the `Eq` trait. However, you can have ADTs that *do* `derive(PartialEq, Eq)`, /// the `Eq` trait. However, you can have ADTs that *do* `derive(PartialEq, Eq)`,
/// and be a case that we want the compiler to accept, and yet the constant's /// and be a case that we want the compiler to accept, and yet the constant's
/// type fails to implement `Eq`. /// type fails to implement `Eq`.
/// ///
@ -176,8 +176,11 @@ pub trait StructuralPartialEq {
/// ```rust /// ```rust
/// #[derive(PartialEq, Eq)] /// #[derive(PartialEq, Eq)]
/// struct Wrap<X>(X); /// struct Wrap<X>(X);
///
/// fn higher_order(_: &()) { } /// fn higher_order(_: &()) { }
///
/// const CFN: Wrap<fn(&())> = Wrap(higher_order); /// const CFN: Wrap<fn(&())> = Wrap(higher_order);
///
/// fn main() { /// fn main() {
/// match CFN { /// match CFN {
/// CFN => {} /// CFN => {}