@@ -139,6 +139,30 @@ mod uninit;
139
139
/// // Note: With the manual implementations the above line will compile.
140
140
/// ```
141
141
///
142
+ /// ## `Clone` and `PartialEq`/`Eq`
143
+ /// `Clone` is intended for the duplication of objects. Consequently, when implementing
144
+ /// both `Clone` and [`PartialEq`], the following property is expected to hold:
145
+ /// ```text
146
+ /// x == x -> x.clone() == x
147
+ /// ```
148
+ /// In other words, if an object compares equal to itself,
149
+ /// its clone must also compare equal to the original.
150
+ ///
151
+ /// For types that also implement [`Eq`] – for which `x == x` always holds –
152
+ /// this implies that `x.clone() == x` must always be true.
153
+ /// Standard library collections such as
154
+ /// [`HashMap`], [`HashSet`], [`BTreeMap`], [`BTreeSet`] and [`BinaryHeap`]
155
+ /// rely on their keys respecting this property for correct behavior.
156
+ ///
157
+ /// This property is automatically satisfied when deriving both `Clone` and [`PartialEq`]
158
+ /// using `#[derive(Clone, PartialEq)]` or when additionally deriving [`Eq`]
159
+ /// using `#[derive(Clone, PartialEq, Eq)]`.
160
+ ///
161
+ /// Violating this property is a logic error. The behavior resulting from a logic error is not
162
+ /// specified, but users of the trait must ensure that such logic errors do *not* result in
163
+ /// undefined behavior. This means that `unsafe` code **must not** rely on the correctness of these
164
+ /// methods.
165
+ ///
142
166
/// ## Additional implementors
143
167
///
144
168
/// In addition to the [implementors listed below][impls],
0 commit comments