StrictValueType protocol

This deserves an example. E.g. you are making your own type like CGPoint and don't want it to be StrictValueType (why?).

On the naming front, "serialisable" to me suggests "an ability to serialise / deserialise", e.g. it could be achieved with some "var serialiseToBytes: Data; init(serialisedData: Data)" requirement, or the same way as Codable is done – in these regards using the name like "Serialisable" instead of "POD" would be quite confusing.

The term Passive data structure (PDS) is also used in the industry.

To sum up, we are discussing a few quite different things here:

  1. POD/PDS values (those can be recreated as "copies" from bits in a different process).
  2. values that can be recreated as copies from bits in the same process only.
  3. a value that can be recreated as a unique copy from bits in the same process (original value is destroyed). Attempt to create a second copy from the same bits should fail (somehow), or successfully create a new unique copy with the previously unique copy destroyed the moment the new unique copy is created (Edited).

Coming from C++ the 1st option is the simplest to grasp.