$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: chris_at_[hidden]
Date: 2008-05-18 14:57:25
Author: chrisj
Date: 2008-05-18 14:57:24 EDT (Sun, 18 May 2008)
New Revision: 45494
URL: http://svn.boost.org/trac/boost/changeset/45494
Log:
Clean up algorithms text
Text files modified: 
   sandbox/committee/concepts/stdlib/clib-algorithms.tex |   191 +++++++++++++++++++++++---------------- 
   1 files changed, 110 insertions(+), 81 deletions(-)
Modified: sandbox/committee/concepts/stdlib/clib-algorithms.tex
==============================================================================
--- sandbox/committee/concepts/stdlib/clib-algorithms.tex	(original)
+++ sandbox/committee/concepts/stdlib/clib-algorithms.tex	2008-05-18 14:57:24 EDT (Sun, 18 May 2008)
@@ -2102,8 +2102,9 @@
 
 \index{reverse@\tcode{reverse}}%
 \color{addclr}\begin{itemdecl}
-template<MutableBidirectionalIterator Iter>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type>
+template<@\removedCC{Mutable}@BidirectionalIterator Iter>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@
   void reverse(Iter @\farg{first}@, Iter @\farg{last}@);
 \end{itemdecl}\color{black}
 
@@ -2173,7 +2174,8 @@
 \index{rotate@\tcode{rotate}}%
 \color{addclr}\begin{itemdecl}
 template<ForwardIterator Iter>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@
   void rotate(Iter @\farg{first}@, Iter @\farg{middle}@,
               Iter @\farg{last}@);
 \end{itemdecl}\color{black}
@@ -2251,14 +2253,15 @@
 
 \index{random_shuffle@\tcode{random_shuffle}}%
 \color{addclr}\begin{itemdecl}
-template<MutableRandomAccessIterator Iter>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type>
+template<@\removedCC{Mutable}@RandomAccessIterator Iter>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@
   void random_shuffle(Iter @\farg{first}@,
                       Iter @\farg{last}@);
 
-template<MutableRandomAccessIterator Iter, Callable<auto, Iter::difference_type> Rand>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type> && 
-           Convertible<Rand::result_type, Iter::difference_type>
+template<@\removedCC{Mutable}@RandomAccessIterator Iter, Callable<auto, Iter::difference_type> Rand>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type> \&\& }@
+           @\addedCC{SwappableIterator<Iter> \&\&}@ Convertible<Rand::result_type, Iter::difference_type>
   void random_shuffle(Iter @\farg{first}@,
                       Iter @\farg{last}@,
                       Rand&& @\farg{rand}@);
@@ -2319,7 +2322,8 @@
 \index{partition@\tcode{partition}}%
 \color{addclr}\begin{itemdecl}
 @\textcolor{addclr}{}@template<BidirectionalIterator Iter, Predicate<auto, Iter::reference> Pred>
-  @\color{addclr}@requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type>
+  @\color{addclr}@requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@
   Iter partition(Iter @\farg{first}@, Iter @\farg{last}@, Pred @\farg{pred}@);
 \end{itemdecl}\color{black}
 
@@ -2367,9 +2371,10 @@
 
 \index{stable_partition@\tcode{stable_partition}}%
 \color{addclr}\begin{itemdecl}
-template<MutableBidirectionalIterator Iter, Predicate<auto, Iter::reference> Pred>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type> &&
-           MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type>
+template<@\removedCC{Mutable}@BidirectionalIterator Iter, Predicate<auto Iter::reference> Pred>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type> \&\&}@
+           @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@
   Iter stable_partition(Iter @\farg{first}@, Iter @\farg{last}@, Pred @\farg{pred}@);
 \end{itemdecl}\color{black}
 
@@ -2424,15 +2429,17 @@
 
 \index{sort@\tcode{sort}}%
 \color{addclr}\begin{itemdecl}
-template<MutableRandomAccessIterator Iter>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type> && 
-           MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type> &&
-           LessThanComparable<Iter::value_type>
+template<@\removedCC{Mutable}@RandomAccessIterator Iter>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type> \&\&}@
+           @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type> \&\&}@
+           @\addedCC{SwappableIterator<Iter> \&\&}@
+           LessThanComparable<Iter::value_type> 
   void sort(Iter @\farg{first}@, Iter @\farg{last}@);
 
-template<MutableRandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type> && 
-           MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type>
+template<@\removedCC{Mutable}@RandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type> \&\&}@
+           @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@
   void sort(Iter @\farg{first}@, Iter @\farg{last}@,
             Compare @\farg{comp}@);
 \end{itemdecl}\color{black}
@@ -2469,15 +2476,17 @@
 
 \index{stable_sort@\tcode{stable_sort}}%
 \color{addclr}\begin{itemdecl}
-template<MutableRandomAccessIterator Iter>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type> && 
-           MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type> &&
-           LessThanComparable<Iter::value_type>
+template<@\removedCC{Mutable}@RandomAccessIterator Iter>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type> \&\&}@
+           @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type> \&\&}@
+           @\addedCC{SwappableIterator<Iter> \&\&}@
+           LessThanComparable<Iter::value_type> 
   void stable_sort(Iter @\farg{first}@, Iter @\farg{last}@);
 
-template<MutableRandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type> && 
-           MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type>
+template<@\removedCC{Mutable}@RandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type> \&\&}@
+           @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@
   void stable_sort(Iter @\farg{first}@, Iter @\farg{last}@,
                    Compare @\farg{comp}@);
 \end{itemdecl}\color{black}
@@ -2513,17 +2522,19 @@
 
 \index{partial_sort@\tcode{partial_sort}}%
 \color{addclr}\begin{itemdecl}
-template<MutableRandomAccessIterator Iter>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type> && 
-           MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type> &&
-           LessThanComparable<Iter::value_type>
+template<@\removedCC{Mutable}@RandomAccessIterator Iter>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type> \&\&}@
+           @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@ @\addedCC{\&\&}@
+           @\addedCC{LessThanComparable<Iter::value_type>}@
   void partial_sort(Iter @\farg{first}@,
                     Iter @\farg{middle}@,
                     Iter @\farg{last}@);
 
-template<MutableRandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type> && 
-           MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type>
+template<@\removedCC{Mutable}@RandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type> \&\&}@
+           @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@
   void partial_sort(Iter @\farg{first}@,
                     Iter @\farg{middle}@,
                     Iter @\farg{last}@,
@@ -2564,20 +2575,22 @@
 
 \index{partial_sort_copy@\tcode{partial_sort_copy}}%
 \color{addclr}\begin{itemdecl}
-template<InputIterator InIter, MutableRandomAccessIterator RAIter>
+template<InputIterator InIter, @\removedCC{Mutable}@RandomAccessIterator RAIter>
   requires HasCopyAssign<RAIter::reference, InIter::value_type> &&
-           SameType<RAIter::value_type&, RAIter::reference> && Swappable<RAIter::value_type> && 
-           MoveConstructible<RAIter::value_type> && MoveAssignable<RAIter::value_type> &&
+           @\removedCC{SameType<RAIter::value_type\&, RAIter::reference> \&\& Swappable<RAIter::value_type> \&\&}@
+           @\removedCC{MoveConstructible<RAIter::value_type> \&\& MoveAssignable<RAIter::value_type> \&\&}@
+           @\addedCC{SwappableIterator<RAIter> \&\&}@
            HasLess<InIter::value_type, RAIter::value_type> &&
            HasLess<RAIter::value_type, InIter::value_type> &&
            HasLess<RAIter::value_type>
   RAIter partial_sort_copy(InIter @\farg{first}@, InIter @\farg{last}@,
                            RAIter @\farg{result_first}@, RAIter @\farg{result_last}@);
 
-template<InputIterator InIter, MutableRandomAccessIterator RAIter, class Compare>
+template<InputIterator InIter, @\removedCC{Mutable}@RandomAccessIterator RAIter, class Compare>
   requires HasCopyAssign<RAIter::reference, InIter::value_type> &&
-           SameType<RAIter::value_type&, RAIter::reference> && Swappable<RAIter::value_type> && 
-           MoveConstructible<RAIter::value_type> && MoveAssignable<RAIter::value_type> &&
+           @\removedCC{SameType<RAIter::value_type\&, RAIter::reference> \&\& Swappable<RAIter::value_type> \&\&}@ 
+           @\removedCC{MoveConstructible<RAIter::value_type> \&\& MoveAssignable<RAIter::value_type> \&\&}@
+           @\addedCC{SwappableIterator<RAIter> \&\&}@
            Predicate<Compare, InIter::value_type, RAIter::value_type> &&
            Predicate<Compare, RAIter::value_type, InIter::value_type> &&
            Predicate<Compare, RAIter::value_type>
@@ -2673,16 +2686,19 @@
 
 \index{nth_element@\tcode{nth_element}}%
 \color{addclr}\begin{itemdecl}
-template<MutableRandomAccessIterator Iter>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type> && 
-           MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type> &&
+template<@\removedCC{Mutable}@RandomAccessIterator Iter>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type> \&\&}@
+           @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type> \&\&}@
+           @\addedCC{SwappableIterator<Iter> \&\&}@
            LessThanComparable<Iter::value_type>
   void nth_element(Iter @\farg{first}@, Iter @\farg{nth}@,
                    Iter @\farg{last}@);
 
-template<MutableRandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type> && 
-           MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type>
+template<@\removedCC{Mutable}@RandomAccessIterator Iter, 
+         Predicate<auto, Iter::value_type, Iter::value_type> Compare>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type> \&\&}@
+           @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@
   void nth_element(Iter @\farg{first}@, Iter @\farg{nth}@,
                    Iter @\farg{last}@,  Compare @\farg{comp}@);
 \end{itemdecl}\color{black}
@@ -3025,18 +3041,20 @@
 
 \index{inplace_merge@\tcode{inplace_merge}}%
 \color{addclr}\begin{itemdecl}
-@\textcolor{addclr}{template}@<MutableBidirectionalIterator Iter>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type> && 
-           MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type> &&
+template<@\removedCC{Mutable}@BidirectionalIterator Iter>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type> \&\&}@
+           @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type> \&\&}@
+           @\addedCC{SwappableIterator<Iter> \&\&}@
            LessThanComparable<Iter::value_type>
   void inplace_merge(Iter @\farg{first}@,
                      Iter @\farg{middle}@,
                      Iter @\farg{last}@);
 
-template<MutableBidirectionalIterator Iter, 
+template<@\removedCC{Mutable}@BidirectionalIterator Iter, 
          Predicate<auto, Iter::value_type, Iter::value_type> Compare>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type> && 
-           MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type> \&\&}@
+           @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@
   void inplace_merge(Iter @\farg{first}@,
                      Iter @\farg{middle}@,
                      Iter @\farg{last}@, Compare @\farg{comp}@);
@@ -3395,13 +3413,15 @@
 
 \index{push_heap@\tcode{push_heap}}%
 \color{addclr}\begin{itemdecl}
-template<MutableRandomAccessIterator Iter>
-  requires MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type> &&
+template<@\removedCC{Mutable}@RandomAccessIterator Iter>
+  requires @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type> \&\&}@
+           @\addedCC{SwappableIterator<Iter> \&\&}@
            LessThanComparable<Iter::value_type>
   void push_heap(Iter @\farg{first}@, Iter @\farg{last}@);
 
-template<MutableRandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
-  requires MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type>
+template<@\removedCC{Mutable}@RandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
+  requires @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@
   void push_heap(Iter @\farg{first}@, Iter @\farg{last}@,
                  Compare @\farg{comp}@);
 \end{itemdecl}\color{black}
@@ -3436,14 +3456,16 @@
 
 \index{pop_heap@\tcode{pop_heap}}%
 \color{addclr}\begin{itemdecl}
-template<MutableRandomAccessIterator Iter>
-  requires MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type> &&
-           Swappable<Iter::value_type> && LessThanComparable<Iter::value_type>
+template<@\removedCC{Mutable}@RandomAccessIterator Iter>
+  requires @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type> \&\&}@
+           @\removedCC{Swappable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@ && LessThanComparable<Iter::value_type>
   void pop_heap(Iter @\farg{first}@, Iter @\farg{last}@);
 
-template<MutableRandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
-  requires MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type> &&
-           Swappable<Iter::value_type>
+template<@\removedCC{Mutable}@RandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
+  requires @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type> \&\&}@
+           @\removedCC{Swappable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@
   void pop_heap(Iter @\farg{first}@, Iter @\farg{last}@,
                 Compare @\farg{comp}@);
 \end{itemdecl}\color{black}
@@ -3482,13 +3504,15 @@
 
 \index{make_heap@\tcode{make_heap}}%
 \color{addclr}\begin{itemdecl}
-template<MutableRandomAccessIterator Iter>
-  requires MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type> &&
+template<@\removedCC{Mutable}@RandomAccessIterator Iter>
+  requires @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type> \&\&}@
+           @\addedCC{SwappableIterator<Iter> \&\&}@
            LessThanComparable<Iter::value_type>
   void make_heap(Iter @\farg{first}@, Iter @\farg{last}@);
 
-@\color{addclr}@template<MutableRandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
-  requires MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type>
+template<@\removedCC{Mutable}@RandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
+  requires @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@
   void make_heap(Iter @\farg{first}@, Iter @\farg{last}@,
                  Compare @\farg{comp}@);
 \end{itemdecl}\color{black}
@@ -3517,14 +3541,15 @@
 
 \index{sort_heap@\tcode{sort_heap}}%
 \color{addclr}\begin{itemdecl}
-template<MutableRandomAccessIterator Iter>
-  requires MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type> &&
-           Swappable<Iter::value_type> && LessThanComparable<Iter::value_type>
+template<@\removedCC{Mutable}@RandomAccessIterator Iter>
+  requires @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type> \&\&}@
+           @\removedCC{Swappable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@ && LessThanComparable<Iter::value_type>
   void sort_heap(Iter @\farg{first}@, Iter @\farg{last}@);
 
-template<MutableRandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
-  requires MoveConstructible<Iter::value_type> && MoveAssignable<Iter::value_type> &&
-           Swappable<Iter::value_type>
+template<@\removedCC{Mutable}@RandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
+  requires @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@
   void sort_heap(Iter @\farg{first}@, Iter @\farg{last}@,
                  Compare @\farg{comp}@);
 \end{itemdecl}\color{black}
@@ -4034,13 +4059,15 @@
 
 \index{next_permutation@\tcode{next_permutation}}%
 \color{addclr}\begin{itemdecl}
-template<MutableBidirectionalIterator Iter>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type> &&
-           LessThanComparable<Iter::reference>
+template<@\removedCC{Mutable}@BidirectionalIterator Iter>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type> \&\&}@
+           @\addedCC{SwappableIterator<Iter>}@
+           @\textcolor{addclr}{LessThanComparable}@<Iter::reference>
   bool next_permutation(Iter @\farg{first}@, Iter @\farg{last}@);
 
-template<MutableBidirectionalIterator Iter, Predicate<auto, Iter::reference, Iter::reference> Compare>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type>
+template<@\removedCC{Mutable}@BidirectionalIterator Iter, Predicate<auto, Iter::reference, Iter::reference> Compare>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@
   @\textcolor{addclr}{bool}@ next_permutation(Iter @\farg{first}@, Iter @\farg{last}@, Compare @\farg{comp}@);
 \end{itemdecl}\color{black}
 
@@ -4074,13 +4101,15 @@
 
 \index{prev_permutation@\tcode{prev_permutation}}%
 \color{addclr}\begin{itemdecl}
-template<MutableBidirectionalIterator Iter>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type> &&
-        LessThanComparable<Iter::reference>
+template<@\removedCC{Mutable}@BidirectionalIterator Iter>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type> \&\&}@
+           @\addedCC{SwappableIterator<Iter>}@
+           @\textcolor{addclr}{}@LessThanComparable<Iter::reference>
   bool prev_permutation(Iter @\farg{first}@, Iter @\farg{last}@);
 
-template<MutableBidirectionalIterator Iter, Predicate<auto, Iter::reference, Iter::reference> Compare>
-  requires SameType<Iter::value_type&, Iter::reference> && Swappable<Iter::value_type>
+template<@\removedCC{Mutable}@BidirectionalIterator Iter, Predicate<auto, Iter::reference, Iter::reference> Compare>
+  requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type>}@
+           @\addedCC{SwappableIterator<Iter>}@
   bool prev_permutation(Iter @\farg{first}@, Iter @\farg{last}@, Compare @\farg{comp}@);
 \end{itemdecl}\color{black}