Why is assignment of a struct allowed and comparison not

Well… the title of this topic is already self-explanatory.

Why can’t we (always) compare structs while assigning is always allowed?

const b: AnyStruct = .init(...);
const a: AnyStruct = b; // always allowed.
const eql: bool = (a == b); // not always allowed.
error: operator == not allowed for type

I know this is because the internal layout of a struct.
But in my mind it goes like: “if Zig can copy it should also be able to compare”.

Because assignment does not imply that comparison is possible…

Structs are not special in this regard either, you can’t compare unions, or arrays, or slices, or tuples.

Why do you think assignment should imply comparison is possible? Is it because you are thinking about it as a bunch of bytes? Even that doesn’t support comparison on the language level, you have to compare the individual bytes…

Why would be being comprised of bytes imply comparison?

What about the meaning ascribed to those bytes, the actual type not the memory, why can’t that be incomparable even if it is assignable to memory?