The behaviour of things like Copy/Send/Sync always seem magical because of the rules that makes the compiler automatically implement them or prevent to implement them for new types.
Rfc 1935, while concerned with a different goal made me wonder if it would not be preferable to have rather some automatical “magical” traits for classes of types (tuples, enums, structs, arrays, functions, closures, refs) that would then be called
Struct and so on… Those trait could then contain as associated types the list of their inner details and then allow to have standard blanket implementation to express ideas like "type X must be
Send if the types of all its internal details are
Send" (Of course for Copy that would require negative bounds and it’s unclear to me if this is a dead idea now). Has any similar suggestion already been proposed ?