There are several additional iterator concepts that are commonly applied
to families of algorithms.
These group together iterator requirements
of algorithm families.
There are three relational concepts that specify
how element values are transferred between
indirectly_readable and indirectly_writable types:
indirectly_movable,
indirectly_copyable, and
indirectly_swappable.
There are three relational concepts for rearrangements:
permutable,
mergeable, and
sortable.
There is one relational concept for comparing values from different sequences:
indirectly_comparable.
The ranges::less function object type
used in the concepts below imposes constraints on the concepts' arguments
in addition to those that appear in the concepts' bodies ([range.cmp]).