@@ -68,8 +68,6 @@ pub type RawMap<A> = hash_map::HashMap<TypeId, Box<A>, BuildHasherDefault<TypeId
68
68
/// The type parameter `A` allows you to use a different value type; normally you will want
69
69
/// it to be `core::any::Any` (also known as `std::any::Any`), but there are other choices:
70
70
///
71
- /// - If you want the entire map to be cloneable, use `CloneAny` instead of `Any`; with
72
- /// that, you can only add types that implement `Clone` to the map.
73
71
/// - You can add on `+ Send` or `+ Send + Sync` (e.g. `Map<dyn Any + Send>`) to add those
74
72
/// auto traits.
75
73
///
@@ -79,9 +77,6 @@ pub type RawMap<A> = hash_map::HashMap<TypeId, Box<A>, BuildHasherDefault<TypeId
79
77
/// also spelled [`AnyMap`] for convenience.
80
78
/// - <code>[Map]<dyn [core::any::Any] + Send></code>
81
79
/// - <code>[Map]<dyn [core::any::Any] + Send + Sync></code>
82
- /// - <code>[Map]<dyn [CloneAny]></code>
83
- /// - <code>[Map]<dyn [CloneAny] + Send></code>
84
- /// - <code>[Map]<dyn [CloneAny] + Send + Sync></code>
85
80
///
86
81
/// ## Example
87
82
///
@@ -205,12 +200,6 @@ mod tests {
205
200
assert_debug :: < Map < dyn Any > > ( ) ;
206
201
assert_debug :: < Map < dyn Any + Send > > ( ) ;
207
202
assert_debug :: < Map < dyn Any + Send + Sync > > ( ) ;
208
- assert_send :: < Map < dyn CloneAny + Send > > ( ) ;
209
- assert_send :: < Map < dyn CloneAny + Send + Sync > > ( ) ;
210
- assert_sync :: < Map < dyn CloneAny + Send + Sync > > ( ) ;
211
- assert_debug :: < Map < dyn CloneAny > > ( ) ;
212
- assert_debug :: < Map < dyn CloneAny + Send > > ( ) ;
213
- assert_debug :: < Map < dyn CloneAny + Send + Sync > > ( ) ;
214
203
}
215
204
216
205
#[ test]
@@ -232,53 +221,6 @@ mod tests {
232
221
}
233
222
}
234
223
235
- // impl some traits for dyn Any
236
- use core:: fmt;
237
-
238
- #[ doc( hidden) ]
239
- pub trait CloneToAny {
240
- /// Clone `self` into a new `Box<dyn CloneAny>` object.
241
- fn clone_to_any ( & self ) -> Box < dyn CloneAny > ;
242
- }
243
-
244
- impl < T : Any + Clone > CloneToAny for T {
245
- #[ inline]
246
- fn clone_to_any ( & self ) -> Box < dyn CloneAny > {
247
- Box :: new ( self . clone ( ) )
248
- }
249
- }
250
-
251
- macro_rules! impl_clone {
252
- ( $t: ty) => {
253
- impl Clone for Box <$t> {
254
- #[ inline]
255
- fn clone( & self ) -> Box <$t> {
256
- // SAFETY: this dance is to reapply any Send/Sync marker. I’m not happy about this
257
- // approach, given that I used to do it in safe code, but then came a dodgy
258
- // future-compatibility warning where_clauses_object_safety, which is spurious for
259
- // auto traits but still super annoying (future-compatibility lints seem to mean
260
- // your bin crate needs a corresponding allow!). Although I explained my plight¹
261
- // and it was all explained and agreed upon, no action has been taken. So I finally
262
- // caved and worked around it by doing it this way, which matches what’s done for
263
- // core::any², so it’s probably not *too* bad.
264
- //
265
- // ¹ https://github.com/rust-lang/rust/issues/51443#issuecomment-421988013
266
- // ² https://github.com/rust-lang/rust/blob/e7825f2b690c9a0d21b6f6d84c404bb53b151b38/library/alloc/src/boxed.rs#L1613-L1616
267
- let clone: Box <dyn CloneAny > = ( * * self ) . clone_to_any( ) ;
268
- let raw: * mut dyn CloneAny = Box :: into_raw( clone) ;
269
- unsafe { Box :: from_raw( raw as * mut $t) }
270
- }
271
- }
272
-
273
- impl fmt:: Debug for $t {
274
- #[ inline]
275
- fn fmt( & self , f: & mut fmt:: Formatter <' _>) -> fmt:: Result {
276
- f. pad( stringify!( $t) )
277
- }
278
- }
279
- } ;
280
- }
281
-
282
224
/// Methods for downcasting from an `Any`-like trait object.
283
225
///
284
226
/// This should only be implemented on trait objects for subtraits of `Any`, though you can
@@ -350,16 +292,3 @@ macro_rules! implement {
350
292
implement ! ( Any ) ;
351
293
implement ! ( Any + Send ) ;
352
294
implement ! ( Any + Send + Sync ) ;
353
-
354
- /// [`Any`], but with cloning.
355
- ///
356
- /// Every type with no non-`'static` references that implements `Clone` implements `CloneAny`.
357
- /// See [`core::any`] for more details on `Any` in general.
358
- pub trait CloneAny : Any + CloneToAny { }
359
- impl < T : Any + Clone > CloneAny for T { }
360
- implement ! ( CloneAny ) ;
361
- implement ! ( CloneAny + Send ) ;
362
- implement ! ( CloneAny + Send + Sync ) ;
363
- impl_clone ! ( dyn CloneAny ) ;
364
- impl_clone ! ( dyn CloneAny + Send ) ;
365
- impl_clone ! ( dyn CloneAny + Send + Sync ) ;
0 commit comments