Интерфейс std :: list не поддерживает циклический список, где first.prev - указатель на последний, а last.next - указатель на первый.
Вы не можете уменьшить итератор, возвращаемый std :: list :: begin (). В более общем плане вы не можете уменьшить любой итератор, возвращаемый std :: ... :: begin ().
Увеличение итератора, возвращаемого std :: list :: back (), приводит к итератору == std :: list :: end () (то же самое в целом и для std :: ... :: back ()).
Если вам интересно, шаблон Visual Studio реализует std :: list внутренне, используя фиктивный узел как часть кругового двусвязного списка. dummy.next указывает на first, dummy.prev указывает на last, а first.prev == last.next == указатель на фиктивный узел, но это не позволяет вам рассматривать его как обычный круговой двусвязный список.