```
template<class ForwardIterator>
constexpr ForwardIterator
shift_left(ForwardIterator first, ForwardIterator last,
typename iterator_traits<ForwardIterator>::difference_type n);
template<class ExecutionPolicy, class ForwardIterator>
ForwardIterator
shift_left(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last,
typename iterator_traits<ForwardIterator>::difference_type n);
```

```
template<class ForwardIterator>
constexpr ForwardIterator
shift_right(ForwardIterator first, ForwardIterator last,
typename iterator_traits<ForwardIterator>::difference_type n);
template<class ExecutionPolicy, class ForwardIterator>
ForwardIterator
shift_right(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last,
typename iterator_traits<ForwardIterator>::difference_type n);
```

ForwardIterator meets
the Cpp17BidirectionalIterator requirements ([bidirectional.iterators]) or
the Cpp17ValueSwappable requirements.

Otherwise, moves the element
from position first + i into position first + n + i
for each non-negative integer i < (last - first) - n.

In the first overload case, if ForwardIterator meets
the Cpp17BidirectionalIterator requirements,
does so in order starting
from i = (last - first) - n - 1 and proceeding to i = 0.