23 Iterators library [iterators]

23.3 Iterator requirements [iterator.requirements]

23.3.7 Common algorithm requirements [alg.req]

23.3.7.4 Concept indirectly_­swappable [alg.req.ind.swap]

The indirectly_­swappable concept specifies a swappable relationship between the values referenced by two readable types.
template<class I1, class I2 = I1>
  concept indirectly_swappable =
    readable<I1> && readable<I2> &&
    requires(I1& i1, I2& i2) {
      ranges::iter_swap(i1, i1);
      ranges::iter_swap(i2, i2);
      ranges::iter_swap(i1, i2);
      ranges::iter_swap(i2, i1);
    };