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 Readable and
Writable types:
IndirectlyMovable,
IndirectlyCopyable, and
IndirectlySwappable.
There are three relational concepts for rearrangements:
Permutable,
Mergeable, and
Sortable.
There is one relational concept for comparing values from different sequences:
IndirectlyComparable.
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]).