For std::atomic<UDT>, compare-exchange compares object representations as if with memcmp, not by calling UDT’s comparison operators. section 5.2.6
This can make compare-exchange fail even when values compare equally:
- A UDT’s comparison operators may use different semantics from comparing its representation. section 5.2.6
- Padding bits may differ without affecting ordinary value comparisons. section 5.2.6
