Details
Description
Value types should
- be movable (ideally with both move-constructor and move-assignment operator)
- use explicit constructors from other types
- use noexcept as appropriate (for all implicitly shared classes: moving, copying, swapping, comparing)
- not have any protected or virtual members (subclassing a value type is not allowed)
- use hidden friends for operators
Types can either have none of the special member functions defined, or all of them.