|
Boost-Commit : |
From: dgregor_at_[hidden]
Date: 2008-06-09 16:45:53
Author: dgregor
Date: 2008-06-09 16:45:52 EDT (Mon, 09 Jun 2008)
New Revision: 46282
URL: http://svn.boost.org/trac/boost/changeset/46282
Log:
Big update based on LWG feedback in Sophia-Antipolis
Added:
sandbox/committee/concepts/issues/issues/issue39.xml (contents, props changed)
sandbox/committee/concepts/issues/issues/issue40.xml (contents, props changed)
sandbox/committee/concepts/issues/issues/issue41.xml (contents, props changed)
sandbox/committee/concepts/issues/issues/issue42.xml (contents, props changed)
Text files modified:
sandbox/committee/concepts/issues/issues/concepts-template.xml | 2
sandbox/committee/concepts/issues/issues/issue35.xml | 36 ++
sandbox/committee/concepts/issues/issues/issue36.xml | 2
sandbox/committee/concepts/issues/issues/issue8.xml | 5
sandbox/committee/concepts/stdlib/Makefile | 36 +-
sandbox/committee/concepts/stdlib/clib-algorithms.tex | 480 ++++++++++++++++-----------------------
sandbox/committee/concepts/stdlib/clib-concepts.tex | 5
sandbox/committee/concepts/stdlib/macros.tex | 2
sandbox/committee/concepts/wording/wording.tex | 2
9 files changed, 250 insertions(+), 320 deletions(-)
Modified: sandbox/committee/concepts/issues/issues/concepts-template.xml
==============================================================================
--- sandbox/committee/concepts/issues/issues/concepts-template.xml (original)
+++ sandbox/committee/concepts/issues/issues/concepts-template.xml 2008-06-09 16:45:52 EDT (Mon, 09 Jun 2008)
@@ -7,7 +7,7 @@
<title>Your Title</title>
<section><sref ref="00.0.0"/></section>
<submitter>Your Name</submitter>
-<date>25 Mar 2008</date>
+<date>9 Jun 2008</date>
<discussion>
<p>
Modified: sandbox/committee/concepts/issues/issues/issue35.xml
==============================================================================
--- sandbox/committee/concepts/issues/issues/issue35.xml (original)
+++ sandbox/committee/concepts/issues/issues/issue35.xml 2008-06-09 16:45:52 EDT (Mon, 09 Jun 2008)
@@ -16,27 +16,47 @@
of different types. For example, it couldn't be used for the proxy
references coming from two different iterator types in
the <code>swap_ranges</code> algorithm.</p>
+
</discussion>
<resolution>
+ <p>Add a new paragraph to [concept.operator] after paragraph 23:</p>
+
+ <pre>
+<ins>auto concept HasSwap<typename T, typename U> {</ins>
+ <ins>void swap(T, U);</ins>
+<ins>}</ins>
+ </pre>
+
+ <ol start="24">
+ <li><ins><i>Note</i>: describes types for which values of those types
+ can be swapped.</ins></li>
+ </ol>
+
<p>Modify the definition of <code>Swappable</code> in
[concept.copymove] as follows:</p>
<pre>
-auto concept Swappable<typename T<ins>, typename U = T</ins>> {
- void swap(T&<ins>&</ins>, <del>T</del><ins>U</ins>&<ins>&</ins>);
-}
+auto concept Swappable<typename T> <ins>: HasSwap<T, T></ins> { }
</pre>
<ol start="11">
- <li><i>Note</i>: describes types for which <del>two</del> values of <del>that</del><ins>those</ins> type<ins>s</ins>
+ <li><i>Note</i>: describes types for which values of that type
can be swapped.</li>
+
+ <li><ins><i>Postconditions</i>: after executing <code>swap(s,
+ t)</code>, <code>t</code> has the value originally held
+ by <code>s</code> and <code>s</code> has the value originally
+ held by <code>t</code>.</ins></li>
</ol>
<p>The synopsis in [utility.concepts] will need to be updated
- accordingly:</p>
+ accordingly.</p>
- <pre>
-auto concept Swappable<typename T<ins>, typename U = T</ins>> <i>see below</i>;
- </pre>
+ <p>Note: the proposed resolution changed at Sophia-Antipolis, to
+ create a new two-argument <code>HasSwap</code> and
+ make <code>Swappable</code> refine that concept. Also, we have
+ removed the reference from <code>swap</code>'s arguments; the
+ appropriate kind of reference will be provided by the user
+ of <code>HasSwap</code> or <code>Swappable</code>.</p>
</resolution>
</issue>
Modified: sandbox/committee/concepts/issues/issues/issue36.xml
==============================================================================
--- sandbox/committee/concepts/issues/issues/issue36.xml (original)
+++ sandbox/committee/concepts/issues/issues/issue36.xml 2008-06-09 16:45:52 EDT (Mon, 09 Jun 2008)
@@ -4,7 +4,7 @@
] >
<issue num="36" status="Open">
-<title><code>HasCopyAssign</code> should be named <code>HasAssign</code></title>
+<title><code>HasCopyAssign</code> should be named <code>HasAssignment</code></title>
<section><sref ref="[concept.operator]"/></section>
<submitter>Howard Hinnant</submitter>
<date>29 May 2008</date>
Added: sandbox/committee/concepts/issues/issues/issue39.xml
==============================================================================
--- (empty file)
+++ sandbox/committee/concepts/issues/issues/issue39.xml 2008-06-09 16:45:52 EDT (Mon, 09 Jun 2008)
@@ -0,0 +1,33 @@
+<?xml version='1.0' encoding='iso-8859-1' standalone='no'?>
+<!DOCTYPE issue SYSTEM "lwg-issue.dtd" [
+ <!ENTITY nbsp " ">
+] >
+
+<issue num="39" status="New">
+<title>Some uses of the MutableXXXIterator concepts are unnecessary</title>
+<section><sref ref="[algorithms]"/></section>
+<submitter>LWG</submitter>
+<date>9 Jun 2008</date>
+
+<discussion>
+ <p>Some algorithms that use the MutableXXXIterator concepts
+ (e.g., <code>MutableForwardIterator</code>) don't actually need the
+ Mutable variant of the concept, because they don't depend on that
+ form of assignability. Generally, these algorithms output some other
+ type, and don't move elements within the sequence. For example, this
+ is the <code>replace</code> algorithm:</p>
+
+ <pre>
+template<MutableForwardIterator Iter, class T>
+ requires HasEqualTo<Iter::reference, T> && HasCopyAssign<Iter::reference, T>
+ void replace(Iter first, Iter last,
+ const T& old_value, const T& new_value);
+ </pre>
+
+ <p>The <code>MutableForwardIterator</code> concept requirement could
+ be changed to <code>ForwardIterator</code> without breaking any
+ code. This makes it possible, for example, to pass a sequence of
+ move-only types into <code>replace</code>.</p>
+</discussion>
+
+</issue>
Added: sandbox/committee/concepts/issues/issues/issue40.xml
==============================================================================
--- (empty file)
+++ sandbox/committee/concepts/issues/issues/issue40.xml 2008-06-09 16:45:52 EDT (Mon, 09 Jun 2008)
@@ -0,0 +1,88 @@
+<?xml version='1.0' encoding='iso-8859-1' standalone='no'?>
+<!DOCTYPE issue SYSTEM "lwg-issue.dtd" [
+ <!ENTITY nbsp " ">
+] >
+
+<issue num="40" status="New">
+<title>HasXXX concepts should not default second parameter when there is an XXXable concept</title>
+<section><sref ref="[utility.concepts]"/></section>
+<submitter>LWG</submitter>
+<date>9 Jun 2008</date>
+
+<discussion>
+ <p>In several cases, we have two-parameter <code>HasXXX</code>
+ concepts that detect the presence of a binary operator or function
+ (e.g., <code><</code>, <code>swap</code>, <code>==</code>) along
+ with a semantic version <code>XXXable</code> that is a
+ single-parameter refinement of that concept. For example, the pair
+ of concepts <code>HasEqualTo</code>
+ and <code>EqualityComparable</code>. Since we know of no cases where
+ one would need to use the <code>HasXXX</code> form of the concept
+ with only one parameter (all such cases use the <code>XXXable</code>
+ form), we should remove the default argument in
+ the <code>HasXXX</code> version to discourage its use with symmetric
+ types.</p>
+</discussion>
+
+<resolution>
+ <p>In [concept.comparison], modify paragraph 1 as follows:</p>
+
+ <pre>
+auto concept LessThanComparable<typename T> : HasLess<T<ins>, T</ins>> {
+ bool operator>(T const& a, T const& b) { return b < a; }
+ bool operator<=(T const& a, T const& b) { return !(b < a); }
+ bool operator>=(T const& a, T const& b) { return !(a < b); }
+ // ...
+}
+ </pre>
+
+ <p>In [concept.comparison], modify paragraph 2 as follows:</p>
+
+ <pre>
+auto concept EqualityComparable<typename T> : HasEqualTo<T<ins>, T</ins>> {
+ bool operator!=(T const& a, T const& b) { return !(a == b); }
+ // ...
+}
+ </pre>
+
+ <p>In [concept.copymove], modify paragraph 7 as follows:</p>
+ <pre>
+auto concept MoveAssignable<typename T> : HasMoveAssign<T<ins>, T</ins>> { }
+ </pre>
+
+ <p>In [concept.operator], modify paragraph 8 as follows:</p>
+
+ <pre>
+auto concept HasLess<typename T, typename U<del> = T</del>> {
+ bool operator<(T const& a, U const& b);
+}
+ </pre>
+
+ <p>In [concept.operator], modify paragraph 9 as follows:</p>
+
+ <pre>
+auto concept HasEqualTo<typename T, typename U<del> = T</del>> {
+ bool operator==(T const& a, U const& b);
+}
+ </pre>
+
+ <p>In [concept.operator], modify paragraph 22 as follows:</p>
+
+ <pre>
+auto concept HasMoveAssign<typename T, typename U<del> = T</del>> {
+ typename result_type;
+ result_type T::operator=(U&&);
+}
+ </pre>
+
+ <p>In [concept.operator], modify paragraph 23 as follows:</p>
+
+ <pre>
+auto concept HasCopyAssign<typename T, typename U<del> = T</del>> : HasMoveAssign<T, U> {
+ result_type T::operator=(const U&);
+}
+ </pre>
+
+ <p>Modify the synopsis in [utility.concepts] accordingly.</p>
+</resolution>
+</issue>
Added: sandbox/committee/concepts/issues/issues/issue41.xml
==============================================================================
--- (empty file)
+++ sandbox/committee/concepts/issues/issues/issue41.xml 2008-06-09 16:45:52 EDT (Mon, 09 Jun 2008)
@@ -0,0 +1,49 @@
+<?xml version='1.0' encoding='iso-8859-1' standalone='no'?>
+<!DOCTYPE issue SYSTEM "lwg-issue.dtd" [
+ <!ENTITY nbsp " ">
+] >
+
+<issue num="41" status="New">
+<title><code>MoveConstructible</code> constructor should be <code>explicit</code></title>
+<section><sref ref="[concept.copymove]"/></section>
+<submitter>LWG</submitter>
+<date>9 Jun 2008</date>
+
+<discussion>
+ <p>Users are permitted to use types with explicit copy and move
+ constructors with the C++98 standard library. To support this use
+ case with concepts, the constructor requirements
+ in <code>MoveConstructible</code> and <code>CopyConstructible</code>
+ need to be <code>explicit</code>.</p>
+</discussion>
+
+<resolution>
+ <p>Modify [concept.copymove] paragraphs 1-3 as follows:</p>
+ <pre>
+auto concept MoveConstructible<typename T> <del>: HasConstructor<T, T&&></del> {
+ <ins>explicit T::T(T&&);</ins>
+}
+ </pre>
+ <ol>
+ <li><i>Note</i>: describes types that can move-construct an object
+ from a value of the same type, possibly altering that value.</li>
+ </ol>
+ <pre>
+T::T(T&& rv); <del>// note: inherited from HasConstructor<T, T&&></del>
+ </pre>
+ <ol start="2">
+ <li><i>Postcondition</i>: the constructed <code>T</code> object is equivalent to the value of <code>rv</code> before the construction. [ <i>Note</i>: there is no
+ requirement on the value of <code>rv</code> after the construction. - <i>end note</i> ]</li>
+ </ol>
+
+ <pre>
+auto concept CopyConstructible<typename T> : MoveConstructible<T><del>, HasConstructor<T, const T&</del>> {
+ <ins>T::T(const T&);</ins>
+
+ axiom CopyPreservation(T x) {
+ T(x) == x;
+ }
+}
+ </pre>
+</resolution>
+</issue>
Added: sandbox/committee/concepts/issues/issues/issue42.xml
==============================================================================
--- (empty file)
+++ sandbox/committee/concepts/issues/issues/issue42.xml 2008-06-09 16:45:52 EDT (Mon, 09 Jun 2008)
@@ -0,0 +1,19 @@
+<?xml version='1.0' encoding='iso-8859-1' standalone='no'?>
+<!DOCTYPE issue SYSTEM "lwg-issue.dtd" [
+ <!ENTITY nbsp " ">
+] >
+
+<issue num="42" status="New">
+<title><code>HasCopyAssign</code> should be named <code>HasCopyAssignment</code></title>
+<section><sref ref="[concept.operator]"/></section>
+<submitter>LWG</submitter>
+<date>9 Jun 2008</date>
+
+<discussion>
+ <p>To match the naming scheme of the other operator
+ concepts, <code>HasCopyAssign</code> should be
+ named <code>HasCopyAssignment</code> and <code>HasMoveAssign</code>
+ should be named <code>HasMoveAssignment</code>.
+ </p>
+</discussion>
+</issue>
Modified: sandbox/committee/concepts/issues/issues/issue8.xml
==============================================================================
--- sandbox/committee/concepts/issues/issues/issue8.xml (original)
+++ sandbox/committee/concepts/issues/issues/issue8.xml 2008-06-09 16:45:52 EDT (Mon, 09 Jun 2008)
@@ -3,7 +3,7 @@
<!ENTITY nbsp " ">
] >
-<issue num="8" status="New">
+<issue num="8" status="Dup">
<title><tt>Swappable</tt> and rvalue references</title>
<section><sref ref="[concept.copymove]"/></section>
<submitter>LWG</submitter>
@@ -22,4 +22,7 @@
signatures that default to the first.</p>
</discussion>
+<resolution>
+ <p>Superceded by issue <iref ref="35"/>.</p>
+</resolution>
</issue>
Modified: sandbox/committee/concepts/stdlib/Makefile
==============================================================================
--- sandbox/committee/concepts/stdlib/Makefile (original)
+++ sandbox/committee/concepts/stdlib/Makefile 2008-06-09 16:45:52 EDT (Mon, 09 Jun 2008)
@@ -41,23 +41,25 @@
.tex.pdf:
@$(PDFLATEX) $*
- @if ( grep 'LaTeX Warning: Label(s) may' $*.log > /dev/null ); \
- then $(PDFLATEX) $* ; else :; fi
- @ if ( grep 'Writing index file' $*.log > /dev/null ); \
- then makeindex $* ; $(PDFLATEX) $* ; fi
- @-if ( grep 'LaTeX Warning: Citation' $*.log > /dev/null ); then \
- bibtex $* ; \
- $(PDFLATEX) $* ; \
- fi
- @if ( grep 'LaTeX Warning: Label(s) may' $*.log > /dev/null || \
- grep 'LaTeX Warning: Citation' $*.log > /dev/null); \
- then $(PDFLATEX) $* ; else :; fi
- @if ( grep 'LaTeX Warning: Label(s) may' $*.log > /dev/null || \
- grep 'LaTeX Warning: Citation' $*.log > /dev/null); \
- then $(PDFLATEX) $* ; else :; fi
- @if ( grep 'LaTeX Warning: Label(s) may' $*.log > /dev/null || \
- grep 'LaTeX Warning: Citation' $*.log > /dev/null); \
- then $(PDFLATEX) $* ; else :; fi
+
+
+# @if ( grep 'LaTeX Warning: Label(s) may' $*.log > /dev/null ); \
+# then $(PDFLATEX) $* ; else :; fi
+# @ if ( grep 'Writing index file' $*.log > /dev/null ); \
+# then makeindex $* ; $(PDFLATEX) $* ; fi
+# @-if ( grep 'LaTeX Warning: Citation' $*.log > /dev/null ); then \
+# bibtex $* ; \
+# $(PDFLATEX) $* ; \
+# fi
+# @if ( grep 'LaTeX Warning: Label(s) may' $*.log > /dev/null || \
+# grep 'LaTeX Warning: Citation' $*.log > /dev/null); \
+# then $(PDFLATEX) $* ; else :; fi
+# @if ( grep 'LaTeX Warning: Label(s) may' $*.log > /dev/null || \
+# grep 'LaTeX Warning: Citation' $*.log > /dev/null); \
+# then $(PDFLATEX) $* ; else :; fi
+# @if ( grep 'LaTeX Warning: Label(s) may' $*.log > /dev/null || \
+# grep 'LaTeX Warning: Citation' $*.log > /dev/null); \
+# then $(PDFLATEX) $* ; else :; fi
#
Modified: sandbox/committee/concepts/stdlib/clib-algorithms.tex
==============================================================================
--- sandbox/committee/concepts/stdlib/clib-algorithms.tex (original)
+++ sandbox/committee/concepts/stdlib/clib-algorithms.tex 2008-06-09 16:45:52 EDT (Mon, 09 Jun 2008)
@@ -51,7 +51,7 @@
\begin{center}
\huge
Concepts for the C++0x Standard Library: Algorithms \\
-(Revision 2)
+(Revision 3)
\vspace{0.5in}
@@ -62,25 +62,27 @@
\end{center}
\vspace{1in}
-\par\noindent Document number: N2625=08-0135\vspace{-6pt}
-\par\noindent Revises document number: N2573=08-0083\vspace{-6pt}
+\par\noindent Document number: DRAFT\vspace{-6pt}
+\par\noindent Revises document number: N2625=08-0135\vspace{-6pt}
\par\noindent Date: \today\vspace{-6pt}
\par\noindent Project: Programming Language \Cpp{}, Library Working Group\vspace{-6pt}
\par\noindent Reply-to: Douglas Gregor $<$\href{mailto:dgregor_at_[hidden]}{dgregor_at_[hidden]}$>$\vspace{-6pt}
\section*{Introduction}
\libintrotext{Chapter 25}
-\section*{Changes from N2084}
+\section*{Changes from N2625}
\begin{itemize}
-\item Updated algorithm requirements to new concept syntax.
-\item Updated algorithm requirements to use the new iterator and
- utility concepts, including the relaxed iterator requirements in
- N2323 and the move concepts of N2322.
-\item Added new algorithms \tcode{move}, \tcode{move_backward},
- \tcode{is_sorted}, \tcode{is_sorted_until}, \tcode{is_heap},
- \tcode{is_heap_until}, \tcode{minmax} and \tcode{minmax_element},
- and the variadic \tcode{min}, \tcode{max}, and \tcode{minmax} overloads
- from N2551.
+\item Replace uses of \tcode{Integral} with \tcode{IntegralLike}.
+\item Changed several iterator \tcode{value_type} associated types to \tcode{reference} associated types, in the following algorithms:
+ \begin{itemize}
+ \item \tcode{remove_copy}, \tcode{remove_copy_if}
+ \item \tcode{unique_copy}
+ \item \tcode{reverse_copy}
+ \item \tcode{replace_copy}, \tcode{replace_copy_if}
+ \end{itemize}
+\item Changed \tcode{adjacent_find}'s \tcode{HasEqualTo} requirement
+ to use \tcode{EqualityComparable}.
+\item Fixed types in the parameter types of \tcode{mismatch}
\end{itemize}
\end{titlepage}
@@ -178,10 +180,10 @@
template<InputIterator Iter1, InputIterator Iter2>
requires HasEqualTo<Iter1::reference, Iter2::reference>
pair<Iter1, Iter2> mismatch(Iter1 @\farg{first1}@, Iter1 @\farg{last1}@,
- Iter @\farg{first2}@);
+ Iter2 @\farg{first2}@);
template<InputIterator Iter1, InputIterator Iter2,
Predicate<auto, Iter1::reference, Iter2::reference> Pred>
- pair<Iter1, Iter2> mismatch(Iter1 @\farg{first1}@, Iter2 @\farg{last1}@,
+ pair<Iter1, Iter2> mismatch(Iter1 @\farg{first1}@, Iter1 @\farg{last1}@,
Iter2 @\farg{first2}@, Pred @\farg{pred}@);
template<InputIterator Iter1, InputIterator Iter2>
@@ -268,12 +270,12 @@
requires HasCopyAssign<Iter::reference, T>
void replace_if(Iter @\farg{first}@, Iter @\farg{last}@,
Pred @\farg{pred}@, const T& @\farg{new_value}@);
- template<InputIterator InIter, OutputIterator<auto, InIter::value_type> OutIter, class T>
+ template<InputIterator InIter, OutputIterator<auto, InIter::@\changedCCC{value_type}{reference}@> OutIter, class T>
requires HasCopyAssign<OutIter::reference, T> && HasEqualTo<InIter::reference, T>
OutIter replace_copy(InIter @\farg{first}@, InIter @\farg{last}@,
OutIter @\farg{result}@,
const T& @\farg{old_value}@, const T& @\farg{new_value}@);
- template<InputIterator InIter, OutputIterator<auto, InIter::value_type> OutIter,
+ template<InputIterator InIter, OutputIterator<auto, InIter::@\changedCCC{value_type}{reference}@> OutIter,
Predicate<auto, InIter::reference> Pred, class T>
requires HasCopyAssign<OutIter::reference, T>
OutIter replace_copy_if(InIter @\farg{first}@, InIter @\farg{last}@,
@@ -283,7 +285,7 @@
template<MutableForwardIterator Iter, class T>
requires HasCopyAssign<Iter::reference, T>
void fill(Iter @\farg{first}@, Iter @\farg{last}@, const T& @\farg{value}@);
- template<class Iter, Integral Size, class T>
+ template<class Iter, IntegralLike Size, class T>
requires OutputIterator<Iter, T>
void fill_n(Iter @\farg{first}@, Size @\farg{n}@, const T& @\farg{value}@);
@@ -291,7 +293,7 @@
requires HasCopyAssign<Iter::reference, Generator::result_type>
void generate(Iter @\farg{first}@, Iter @\farg{last}@,
Generator @\farg{gen}@);
- template<class Iter, Integral Size, Callable Generator>
+ template<class Iter, IntegralLike Size, Callable Generator>
requires OutputIterator<Iter, Generator::result_type>
void generate_n(Iter @\farg{first}@, Size @\farg{n}@, Generator @\farg{gen}@);
@@ -303,11 +305,11 @@
requires MoveAssignable<Iter::reference>
Iter remove_if(Iter @\farg{first}@, Iter @\farg{last}@,
Pred @\farg{pred}@);
- template<InputIterator InIter, OutputIterator<auto, InIter::value_type> OutIter, class T>
+ template<InputIterator InIter, OutputIterator<auto, InIter::@\changedCCC{value_type}{reference}@> OutIter, class T>
requires HasEqualTo<InIter::reference, T>
OutIter remove_copy(InIter @\farg{first}@, InIter @\farg{last}@,
OutIter @\farg{result}@, const T& @\farg{value}@);
- template<InputIterator InIter, OutputIterator<auto, InIter::value_type> OutIter,
+ template<InputIterator InIter, OutputIterator<auto, InIter::@\changedCCC{value_type}{reference}@> OutIter,
Predicate<auto, InIter::reference> Pred>
OutIter remove_copy_if(InIter @\farg{first}@, InIter @\farg{last}@,
OutIter @\farg{result}@, Pred @\farg{pred}@);
@@ -326,12 +328,12 @@
OutIter
unique_copy(InIter @\farg{first}@, InIter @\farg{last}@,
OutIter @\farg{result}@);
- template<ForwardIterator InIter, OutputIterator<auto, InIter::value_type> OutIter>
+ template<ForwardIterator InIter, OutputIterator<auto, InIter::@\changedCCC{value_type}{reference}@> OutIter>
requires EqualityComparable<InIter::reference>
OutIter unique_copy(InIter @\farg{first}@, InIter @\farg{last}@,
OutIter @\farg{result}@);
template<InputIterator InIter, MutableForwardIterator OutIter>
- requires HasEqualTo<OutIter::reference, InIter::value_type> &&
+ requires HasEqualTo<OutIter::reference, InIter::@\changedCCC{value_type}{reference}@> &&
HasCopyAssign<OutIter::reference, InIter::reference> &&
!ForwardIterator<InIter>
OutIter unique_copy(InIter @\farg{first}@, InIter @\farg{last}@,
@@ -342,7 +344,7 @@
!ForwardIterator<InIter> && !MutableForwardIterator<OutIter>
OutIter unique_copy(InIter @\farg{first}@, InIter @\farg{last}@,
OutIter @\farg{result}@, Pred @\farg{pred}@);
- template<ForwardIterator InIter, OutputIterator<auto, InIter::value_type> OutIter,
+ template<ForwardIterator InIter, OutputIterator<auto, InIter::@\changedCCC{value_type}{reference}@> OutIter,
Predicate<auto, InIter::reference, InIter::reference> Pred>
OutIter unique_copy(InIter @\farg{first}@, InIter @\farg{last}@,
OutIter @\farg{result}@);
@@ -353,31 +355,27 @@
OutIter unique_copy(InIter @\farg{first}@, InIter @\farg{last}@,
OutIter @\farg{result}@, Pred @\farg{pred}@);
- template<@\removedCC{Mutable}@BidirectionalIterator Iter>
- requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type>}@
- @\addedCC{SwappableIterator<Iter>}@
+ template<BidirectionalIterator Iter>
+ requires SwappableIterator<Iter>
void reverse(Iter @\farg{first}@, Iter @\farg{last}@);
- template<BidirectionalIterator InIter, OutputIterator<auto, InIter::value_type> OutIter>
+ template<BidirectionalIterator InIter, OutputIterator<auto, InIter::@\changedCCC{value_type}{reference}@> OutIter>
OutIter reverse_copy(InIter @\farg{first}@,
InIter @\farg{last}@, OutIter @\farg{result}@);
template<ForwardIterator Iter>
- requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type>}@
- @\addedCC{SwappableIterator<Iter>}@
+ requires SwappableIterator<Iter>
void rotate(Iter @\farg{first}@, Iter @\farg{middle}@,
Iter @\farg{last}@);
template<ForwardIterator InIter, OutputIterator<auto, InIter::value_type> OutIter>
OutIter rotate_copy(InIter @\farg{first}@, InIter @\farg{middle}@,
InIter @\farg{last}@, OutIter @\farg{result}@);
- template<@\removedCC{Mutable}@RandomAccessIterator Iter>
- requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type>}@
- @\addedCC{SwappableIterator<Iter>}@
+ template<RandomAccessIterator Iter>
+ requires SwappableIterator<Iter>
void random_shuffle(Iter @\farg{first}@,
Iter @\farg{last}@);
- 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>
+ template<RandomAccessIterator Iter, Callable<auto, Iter::difference_type> Rand>
+ requires SwappableIterator<Iter> && Convertible<Rand::result_type, Iter::difference_type>
void random_shuffle(Iter @\farg{first}@,
Iter @\farg{last}@,
Rand& @\farg{rand}@);
@@ -388,77 +386,58 @@
@\textcolor{black}{// \ref{alg.partitions}, partitions:}@
template<BidirectionalIterator Iter, Predicate<auto, Iter::reference> Pred>
- @\color{addclr}@requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type>}@
- @\addedCC{SwappableIterator<Iter>}@
+ @\color{addclr}@requires SwappableIterator<Iter>
Iter partition(Iter @\farg{first}@, Iter @\farg{last}@, Pred @\farg{pred}@);
- 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>}@
+ template<BidirectionalIterator Iter, Predicate<auto Iter::reference> Pred>
+ requires SwappableIterator<Iter>
Iter stable_partition(Iter @\farg{first}@, Iter @\farg{last}@, Pred @\farg{pred}@);
@\textcolor{black}{// \ref{alg.sorting}, sorting and related operations:}@
@\textcolor{black}{// \ref{alg.sort}, sorting:}@
- 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> \&\&}@
+ template<RandomAccessIterator Iter>
+ requires SwappableIterator<Iter> &&
LessThanComparable<Iter::value_type>
void sort(Iter @\farg{first}@, Iter @\farg{last}@);
- template<@\removedCC{Mutable}@RandomAccessIterator Iter,
+ template<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>}@
+ requires SwappableIterator<Iter>
void sort(Iter @\farg{first}@, Iter @\farg{last}@,
Compare @\farg{comp}@);
- 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> \&\&}@
+ template<RandomAccessIterator Iter>
+ requires SwappableIterator<Iter> &&
LessThanComparable<Iter::value_type>
void stable_sort(Iter @\farg{first}@, Iter @\farg{last}@);
- template<@\removedCC{Mutable}@RandomAccessIterator Iter,
+ template<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>}@
+ requires SwappableIterator<Iter>
void stable_sort(Iter @\farg{first}@, Iter @\farg{last}@,
Compare @\farg{comp}@);
- 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>}@
+ template<RandomAccessIterator Iter>
+ requires SwappableIterator<Iter> &&
+ LessThanComparable<Iter::value_type>
void partial_sort(Iter @\farg{first}@,
Iter @\farg{middle}@,
Iter @\farg{last}@);
- template<@\removedCC{Mutable}@RandomAccessIterator Iter,
+ template<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>}@
+ requires SwappableIterator<Iter>
void partial_sort(Iter @\farg{first}@,
Iter @\farg{middle}@,
Iter @\farg{last}@,
Compare @\farg{comp}@);
- template<InputIterator InIter, @\removedCC{Mutable}@RandomAccessIterator RAIter>
+ template<InputIterator InIter, RandomAccessIterator RAIter>
requires HasCopyAssign<RAIter::reference, InIter::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> \&\&}@
+ 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, @\removedCC{Mutable}@RandomAccessIterator RAIter, class Compare>
+ template<InputIterator InIter, RandomAccessIterator RAIter, class Compare>
requires HasCopyAssign<RAIter::reference, InIter::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> \&\&}@
+ SwappableIterator<RAIter> &&
Predicate<Compare, InIter::value_type, RAIter::value_type> &&
Predicate<Compare, RAIter::value_type, InIter::value_type> &&
Predicate<Compare, RAIter::value_type>
@@ -479,18 +458,12 @@
Iter is_sorted_until(Iter @\farg{first}@, Iter @\farg{last}@,
Compare @\farg{comp}@);
- 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> \&\&}@
+ template<RandomAccessIterator Iter>
+ requires SwappableIterator<Iter> &&
LessThanComparable<Iter::value_type>
void nth_element(Iter @\farg{first}@, Iter @\farg{nth}@,
Iter @\farg{last}@);
- 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>}@
+ template<SwappableIterator<Iter>
void nth_element(Iter @\farg{first}@, Iter @\farg{nth}@,
Iter @\farg{last}@, Compare @\farg{comp}@);
@@ -552,19 +525,15 @@
InIter2 @\farg{first2}@, InIter2 @\farg{last2}@,
OutIter @\farg{result}@, Compare @\farg{comp}@);
- 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> \&\&}@
+ template<BidirectionalIterator Iter>
+ requires SwappableIterator<Iter> &&
LessThanComparable<Iter::value_type>
void inplace_merge(Iter @\farg{first}@,
Iter @\farg{middle}@,
Iter @\farg{last}@);
- template<@\removedCC{Mutable}@BidirectionalIterator Iter,
+ template<BidirectionalIterator 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>}@
+ requires SwappableIterator<Iter>
void inplace_merge(Iter @\farg{first}@,
Iter @\farg{middle}@,
Iter @\farg{last}@, Compare @\farg{comp}@);
@@ -642,52 +611,41 @@
OutIter @\farg{result}@, Compare @\farg{comp}@);
@\textcolor{black}{// \ref{alg.heap.operations}, heap operations:}@
- template<@\removedCC{Mutable}@RandomAccessIterator Iter>
- requires @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type> \&\&}@
- @\addedCC{SwappableIterator<Iter> \&\&}@
+ template<RandomAccessIterator Iter>
+ requires SwappableIterator<Iter> &&
LessThanComparable<Iter::value_type>
void push_heap(Iter @\farg{first}@, Iter @\farg{last}@);
- template<@\removedCC{Mutable}@RandomAccessIterator Iter,
+ template<RandomAccessIterator Iter,
Predicate<auto, Iter::value_type, Iter::value_type> Compare>
- requires @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type>}@
- @\addedCC{SwappableIterator<Iter>}@
+ requires SwappableIterator<Iter>
void push_heap(Iter @\farg{first}@, Iter @\farg{last}@,
Compare @\farg{comp}@);
- 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>
+ template<RandomAccessIterator Iter>
+ requires SwappableIterator<Iter> && LessThanComparable<Iter::value_type>
void pop_heap(Iter @\farg{first}@, Iter @\farg{last}@);
- template<@\removedCC{Mutable}@RandomAccessIterator Iter,
+ template<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>}@
+ requires SwappableIterator<Iter>
void pop_heap(Iter @\farg{first}@, Iter @\farg{last}@,
Compare @\farg{comp}@);
- template<@\removedCC{Mutable}@RandomAccessIterator Iter>
- requires @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type> \&\&}@
- @\addedCC{SwappableIterator<Iter> \&\&}@
+ template<RandomAccessIterator Iter>
+ requires SwappableIterator<Iter> &&
LessThanComparable<Iter::value_type>
void make_heap(Iter @\farg{first}@, Iter @\farg{last}@);
- template<@\removedCC{Mutable}@RandomAccessIterator Iter,
+ template<RandomAccessIterator Iter,
Predicate<auto, Iter::value_type, Iter::value_type> Compare>
- requires @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type>}@
- @\addedCC{SwappableIterator<Iter>}@
+ requires SwappableIterator<Iter>
void make_heap(Iter @\farg{first}@, Iter @\farg{last}@,
Compare @\farg{comp}@);
- 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>
+ template<RandomAccessIterator Iter>
+ requires SwappableIterator<Iter> && LessThanComparable<Iter::value_type>
void sort_heap(Iter @\farg{first}@, Iter @\farg{last}@);
- template<@\removedCC{Mutable}@RandomAccessIterator Iter,
+ template<RandomAccessIterator Iter,
Predicate<auto, Iter::value_type, Iter::value_type> Compare>
- requires @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type>}@
- @\addedCC{SwappableIterator<Iter>}@
+ requires SwappableIterator<Iter>
void sort_heap(Iter @\farg{first}@, Iter @\farg{last}@,
Compare @\farg{comp}@);
@@ -705,35 +663,35 @@
@\textcolor{black}{// \ref{alg.min.max}, minimum and maximum:}@
template<LessThanComparable T> const T& min(const T& @\farg{a}@, const T& @\farg{b}@);
template<class T, Predicate<auto, T, T> Compare>
- @\addedCC{requires !SameType<T, Compare>}@
+ requires !SameType<T, Compare>
const T& min(const T& @\farg{a}@, const T& @\farg{b}@, Compare @\farg{comp}@);
- @\removedCC{template<LessThanComparable T> const T\& min(const T\& \mbox{\farg{a}}, const T\& \mbox{\farg{b}}, const T\& \mbox{\farg{c}});}@
- @\addedCC{template<LessThanComparable T, LessThanComparable... Args>}@
- @\addedCC{requires SameType<T, Args>...}@
- @\addedCC{const T\& min(const T\& \mbox{\farg{a}}, const Args\&... \mbox{\farg{args}});}@
+ @\removedConcepts{template<LessThanComparable T> const T\& min(const T\& \mbox{\farg{a}}, const T\& \mbox{\farg{b}}, const T\& \mbox{\farg{c}});}@
+ template<LessThanComparable T, LessThanComparable... Args>
+ requires SameType<T, Args>...
+ const T& min(const T& @\farg{a}@, const Args&... @\farg{args}@);
@\textcolor{black}{template<class T, class U, class... Args>}@
@\textcolor{black}{const T\& min(const T\& \mbox{\farg{a}}, const U\& \mbox{\farg{b}}, const Args\&... \mbox{\farg{args}});}@
template<LessThanComparable T> const T& max(const T& @\farg{a}@, const T& @\farg{b}@);
template<class T, Predicate<auto, T, T> Compare>
- @\addedCC{requires !SameType<T, Compare>}@
+ requires !SameType<T, Compare>
const T& max(const T& @\farg{a}@, const T& @\farg{b}@, Compare @\farg{comp}@);
- @\removedCC{template<LessThanComparable T> const T\& max(const T\& \mbox{\farg{a}}, const T\& \mbox{\farg{b}}, const T\& \mbox{\farg{c}});}@
- @\addedCC{template<LessThanComparable T, LessThanComparable... Args>}@
- @\addedCC{requires SameType<T, Args>...}@
- @\addedCC{const T\& max(const T\& \mbox{\farg{a}}, const Args\&... \mbox{\farg{args}});}@
+ @\removedConcepts{template<LessThanComparable T> const T\& max(const T\& \mbox{\farg{a}}, const T\& \mbox{\farg{b}}, const T\& \mbox{\farg{c}});}@
+ template<LessThanComparable T, LessThanComparable... Args>
+ requires SameType<T, Args>...
+ const T& max(const T& @\farg{a}@, const Args&... @\farg{args}@);
@\textcolor{black}{template<class T, class U, class... Args>}@
@\textcolor{black}{const T\& max(const T\& \mbox{\farg{a}}, const U\& \mbox{\farg{b}}, const Args\&... \mbox{\farg{args}});}@
template<LessThanComparable T> pair<const T&, const T&> minmax(const T& @\farg{a}@, const T& @\farg{b}@);
template<class T, Predicate<auto, T, T> Compare>
- @\addedCC{requires !SameType<T, Compare>}@
+ requires !SameType<T, Compare>
pair<const T&, const T&> minmax(const T& @\farg{a}@, const T& @\farg{b}@, Compare @\farg{comp}@);
- @\removedCC{template<LessThanComparable T>}@
- @\removedCC{pair<const T\&, const T\&> minmax(const T\& \mbox{\farg{a}}, const T\& \mbox{\farg{b}}, const T\& \mbox{\farg{c}});}@
- @\addedCC{template<LessThanComparable T, LessThanComparable... Args>}@
- @\addedCC{requires SameType<T, Args>...}@
- @\addedCC{pair<const T\&, const T\&> minmax(const T\& \mbox{\farg{a}}, const Args\&... \mbox{\farg{args}});}@
+ @\removedConcepts{template<LessThanComparable T>}@
+ @\removedConcepts{pair<const T\&, const T\&> minmax(const T\& \mbox{\farg{a}}, const T\& \mbox{\farg{b}}, const T\& \mbox{\farg{c}});}@
+ template<LessThanComparable T, LessThanComparable... Args>
+ requires SameType<T, Args>...
+ pair<const T&, const T&> minmax(const T& @\farg{a}@, const Args&... @\farg{args}@);
@\textcolor{black}{template<class T, class U, class... Args>}@
@\textcolor{black}{pair<const T\&, const T\&> minmax(const T\& \mbox{\farg{a}}, const U\& \mbox{\farg{b}}, const Args\&... \mbox{\farg{args}});}@
@@ -773,25 +731,21 @@
Compare @\farg{comp}@);
@\textcolor{black}{// \ref{alg.permutation.generators}, permutations:}@
- template<@\removedCC{Mutable}@BidirectionalIterator Iter>
- requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type> \&\&}@
- @\addedCC{SwappableIterator<Iter>}@
+ template<BidirectionalIterator Iter>
+ requires SwappableIterator<Iter>
@\textcolor{addclr}{LessThanComparable}@<Iter::reference>
bool next_permutation(Iter @\farg{first}@, Iter @\farg{last}@);
- template<@\removedCC{Mutable}@BidirectionalIterator Iter,
+ template<BidirectionalIterator Iter,
Predicate<auto, Iter::reference, Iter::reference> Compare>
- requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type>}@
- @\addedCC{SwappableIterator<Iter>}@
+ requires SwappableIterator<Iter>
@\textcolor{addclr}{}@bool next_permutation(Iter @\farg{first}@, Iter @\farg{last}@, Compare @\farg{comp}@);
- template<@\removedCC{Mutable}@BidirectionalIterator Iter>
- requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type> \&\&}@
- @\addedCC{SwappableIterator<Iter>}@
+ template<BidirectionalIterator Iter>
+ requires SwappableIterator<Iter>
@\textcolor{addclr}{}@LessThanComparable<Iter::reference>
bool prev_permutation(Iter @\farg{first}@, Iter @\farg{last}@);
- template<@\removedCC{Mutable}@BidirectionalIterator Iter,
+ template<BidirectionalIterator Iter,
Predicate<auto, Iter::reference, Iter::reference> Compare>
- requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type>}@
- @\addedCC{SwappableIterator<Iter>}@
+ requires SwappableIterator<Iter>
bool prev_permutation(Iter @\farg{first}@, Iter @\farg{last}@, Compare @\farg{comp}@);
}
\end{codeblock}
@@ -1141,7 +1095,7 @@
\index{adjacent_find@\tcode{adjacent_find}}%
\color{addclr}\begin{itemdecl}
template<ForwardIterator Iter>
- requires HasEqualTo<Iter::reference>
+ requires @\changedCCC{HasEqualTo}{EqualityComparable}@<Iter::reference>
Iter adjacent_find(Iter @\farg{first}@, Iter @\farg{last}@);
template<ForwardIterator Iter, Predicate<auto, Iter::reference, Iter::reference> Pred>
@@ -1212,11 +1166,11 @@
template<InputIterator Iter1, InputIterator Iter2>
requires HasEqualTo<Iter1::reference, Iter2::reference>
pair<Iter1, Iter2> mismatch(Iter1 @\farg{first1}@, Iter1 @\farg{last1}@,
- Iter @\farg{first2}@);
+ Iter2 @\farg{first2}@);
template<InputIterator Iter1, InputIterator Iter2,
Predicate<auto, Iter1::reference, Iter2::reference> Pred>
- pair<Iter1, Iter2> mismatch(Iter1 @\farg{first1}@, Iter2 @\farg{last1}@,
+ pair<Iter1, Iter2> mismatch(Iter1 @\farg{first1}@, Iter1 @\farg{last1}@,
Iter2 @\farg{first2}@, Pred @\farg{pred}@);
\end{itemdecl}\color{black}
@@ -1751,13 +1705,13 @@
\index{replace_copy@\tcode{replace_copy}}%
\index{replace_copy_if@\tcode{replace_copy_if}}%
\color{addclr}\begin{itemdecl}
-template<InputIterator InIter, OutputIterator<auto, InIter::value_type> OutIter, class T>
+template<InputIterator InIter, OutputIterator<auto, InIter::@\changedCCC{value_type}{reference}@> OutIter, class T>
requires HasCopyAssign<OutIter::reference, T> && HasEqualTo<InIter::reference, T>
OutIter replace_copy(InIter @\farg{first}@, InIter @\farg{last}@,
OutIter @\farg{result}@,
const T& @\farg{old_value}@, const T& @\farg{new_value}@);
-template<InputIterator InIter, OutputIterator<auto, InIter::value_type> OutIter,
+template<InputIterator InIter, OutputIterator<auto, InIter::@\changedCCC{value_type}{reference}@> OutIter,
Predicate<auto, InIter::reference> Pred, class T>
requires HasCopyAssign<OutIter::reference, T>
OutIter replace_copy_if(InIter @\farg{first}@, InIter @\farg{last}@,
@@ -1819,7 +1773,7 @@
requires HasCopyAssign<Iter::reference, T>
void fill(Iter @\farg{first}@, Iter @\farg{last}@, const T& @\farg{value}@);
-template<class Iter, Integral Size, class T>
+template<class Iter, IntegralLike Size, class T>
requires OutputIterator<Iter, T>
void fill_n(Iter @\farg{first}@, Size @\farg{n}@, const T& @\farg{value}@);
\end{itemdecl}\color{black}
@@ -1831,7 +1785,7 @@
12.3).}\efootnote{The ``Convertible to integral type'' requirements
are very odd. We can model them with concepts if we need, but I've
chosen the simpler route of requiring the \tcode{Size} parameter to model
- \tcode{Integral}. This could break existing code, although it
+ \tcode{IntegralLike}. This could break existing code, although it
appears that such existing code would fail to compile with at least
libstdc++.}
@@ -1859,7 +1813,7 @@
void generate(Iter @\farg{first}@, Iter @\farg{last}@,
Generator @\farg{gen}@);
-template<class Iter, Integral Size, Callable Generator>
+template<class Iter, IntegralLike Size, Callable Generator>
requires OutputIterator<Iter, Generator::result_type>
void generate_n(Iter @\farg{first}@, Size @\farg{n}@, Generator @\farg{gen}@);
\end{itemdecl}\color{black}
@@ -1880,7 +1834,7 @@
12.3).}\efootnote{The ``Convertible to integral type'' requirements
are very odd. We can model them with concepts if we need, but I've
chosen the simpler route of requiring the \tcode{Size} parameter to model
- \tcode{Integral}. This could break existing code, although it
+ \tcode{IntegralLike}. This could break existing code, although it
appears that such existing code would fail to compile with at least
libstdc++.}
@@ -1939,12 +1893,12 @@
\index{remove_copy@\tcode{remove_copy}}%
\index{remove_copy_if@\tcode{remove_copy_if}}%
\color{addclr}\begin{itemdecl}
-template<InputIterator InIter, OutputIterator<auto, InIter::value_type> OutIter, class T>
+template<InputIterator InIter, OutputIterator<auto, InIter::@\changedCCC{value_type}{reference}@> OutIter, class T>
requires HasEqualTo<InIter::reference, T>
OutIter remove_copy(InIter @\farg{first}@, InIter @\farg{last}@,
OutIter @\farg{result}@, const T& @\farg{value}@);
-template<InputIterator InIter, OutputIterator<auto, InIter::value_type> OutIter,
+template<InputIterator InIter, OutputIterator<auto, InIter::@\changedCCC{value_type}{reference}@> OutIter,
Predicate<auto, InIter::reference> Pred>
OutIter remove_copy_if(InIter @\farg{first}@, InIter @\farg{last}@,
OutIter @\farg{result}@, Pred @\farg{pred}@);
@@ -2037,13 +1991,13 @@
unique_copy(InIter @\farg{first}@, InIter @\farg{last}@,
OutIter @\farg{result}@);
-template<ForwardIterator InIter, OutputIterator<auto, InIter::value_type> OutIter>
+template<ForwardIterator InIter, OutputIterator<auto, InIter::@\changedCCC{value_type}{reference}@> OutIter>
requires EqualityComparable<InIter::reference>
OutIter unique_copy(InIter @\farg{first}@, InIter @\farg{last}@,
OutIter @\farg{result}@);
@\textcolor{addclr}{template}@<InputIterator InIter, MutableForwardIterator OutIter>
- requires HasEqualTo<OutIter::reference, InIter::value_type> &&
+ requires HasEqualTo<OutIter::reference, InIter::@\changedCCC{value_type}{reference}@> &&
HasCopyAssign<OutIter::reference, InIter::reference> &&
!ForwardIterator<InIter>
OutIter unique_copy(InIter @\farg{first}@, InIter @\farg{last}@,
@@ -2056,7 +2010,7 @@
OutIter unique_copy(InIter @\farg{first}@, InIter @\farg{last}@,
@\textcolor{addclr}{OutIter}@ @\farg{result}@, Pred @\farg{pred}@);
-template<ForwardIterator InIter, OutputIterator<auto, InIter::value_type> OutIter,
+template<ForwardIterator InIter, OutputIterator<auto, InIter::@\changedCCC{value_type}{reference}@> OutIter,
Predicate<auto, InIter::reference, InIter::reference> Pred>
OutIter unique_copy(InIter @\farg{first}@, InIter @\farg{last}@,
OutIter @\farg{result}@);
@@ -2122,9 +2076,8 @@
\index{reverse@\tcode{reverse}}%
\color{addclr}\begin{itemdecl}
-template<@\removedCC{Mutable}@BidirectionalIterator Iter>
- requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type>}@
- @\addedCC{SwappableIterator<Iter>}@
+template<BidirectionalIterator Iter>
+ requires SwappableIterator<Iter>
void reverse(Iter @\farg{first}@, Iter @\farg{last}@);
\end{itemdecl}\color{black}
@@ -2152,7 +2105,7 @@
\index{reverse_copy@\tcode{reverse_copy}}%
\color{addclr}\begin{itemdecl}
-template<BidirectionalIterator InIter, OutputIterator<auto, InIter::value_type> OutIter>
+template<BidirectionalIterator InIter, OutputIterator<auto, InIter::@\changedCCC{value_type}{reference}@> OutIter>
OutIter reverse_copy(InIter @\farg{first}@,
InIter @\farg{last}@, OutIter @\farg{result}@);
\end{itemdecl}\color{black}
@@ -2194,8 +2147,7 @@
\index{rotate@\tcode{rotate}}%
\color{addclr}\begin{itemdecl}
template<ForwardIterator Iter>
- requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type>}@
- @\addedCC{SwappableIterator<Iter>}@
+ requires SwappableIterator<Iter>
void rotate(Iter @\farg{first}@, Iter @\farg{middle}@,
Iter @\farg{last}@);
\end{itemdecl}\color{black}
@@ -2273,15 +2225,13 @@
\index{random_shuffle@\tcode{random_shuffle}}%
\color{addclr}\begin{itemdecl}
-template<@\removedCC{Mutable}@RandomAccessIterator Iter>
- requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type>}@
- @\addedCC{SwappableIterator<Iter>}@
+template<RandomAccessIterator Iter>
+ requires SwappableIterator<Iter>
void random_shuffle(Iter @\farg{first}@,
Iter @\farg{last}@);
-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>
+template<RandomAccessIterator Iter, Callable<auto, Iter::difference_type> Rand>
+ requires SwappableIterator<Iter> && Convertible<Rand::result_type, Iter::difference_type>
void random_shuffle(Iter @\farg{first}@,
Iter @\farg{last}@,
Rand&& @\farg{rand}@);
@@ -2342,8 +2292,7 @@
\index{partition@\tcode{partition}}%
\color{addclr}\begin{itemdecl}
@\textcolor{addclr}{}@template<BidirectionalIterator Iter, Predicate<auto, Iter::reference> Pred>
- @\color{addclr}@requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type>}@
- @\addedCC{SwappableIterator<Iter>}@
+ @\color{addclr}@requires SwappableIterator<Iter>
Iter partition(Iter @\farg{first}@, Iter @\farg{last}@, Pred @\farg{pred}@);
\end{itemdecl}\color{black}
@@ -2391,10 +2340,8 @@
\index{stable_partition@\tcode{stable_partition}}%
\color{addclr}\begin{itemdecl}
-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>}@
+template<BidirectionalIterator Iter, Predicate<auto Iter::reference> Pred>
+ requires SwappableIterator<Iter>
Iter stable_partition(Iter @\farg{first}@, Iter @\farg{last}@, Pred @\farg{pred}@);
\end{itemdecl}\color{black}
@@ -2449,17 +2396,13 @@
\index{sort@\tcode{sort}}%
\color{addclr}\begin{itemdecl}
-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> \&\&}@
+template<RandomAccessIterator Iter>
+ requires SwappableIterator<Iter> &&
LessThanComparable<Iter::value_type>
void sort(Iter @\farg{first}@, Iter @\farg{last}@);
-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>}@
+template<RandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
+ requires SwappableIterator<Iter>
void sort(Iter @\farg{first}@, Iter @\farg{last}@,
Compare @\farg{comp}@);
\end{itemdecl}\color{black}
@@ -2496,17 +2439,13 @@
\index{stable_sort@\tcode{stable_sort}}%
\color{addclr}\begin{itemdecl}
-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> \&\&}@
+template<RandomAccessIterator Iter>
+ requires SwappableIterator<Iter> &&
LessThanComparable<Iter::value_type>
void stable_sort(Iter @\farg{first}@, Iter @\farg{last}@);
-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>}@
+template<RandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
+ requires SwappableIterator<Iter>
void stable_sort(Iter @\farg{first}@, Iter @\farg{last}@,
Compare @\farg{comp}@);
\end{itemdecl}\color{black}
@@ -2542,19 +2481,15 @@
\index{partial_sort@\tcode{partial_sort}}%
\color{addclr}\begin{itemdecl}
-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>}@
+template<RandomAccessIterator Iter>
+ requires SwappableIterator<Iter> &&
+ LessThanComparable<Iter::value_type>
void partial_sort(Iter @\farg{first}@,
Iter @\farg{middle}@,
Iter @\farg{last}@);
-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>}@
+template<RandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
+ requires SwappableIterator<Iter>
void partial_sort(Iter @\farg{first}@,
Iter @\farg{middle}@,
Iter @\farg{last}@,
@@ -2595,22 +2530,18 @@
\index{partial_sort_copy@\tcode{partial_sort_copy}}%
\color{addclr}\begin{itemdecl}
-template<InputIterator InIter, @\removedCC{Mutable}@RandomAccessIterator RAIter>
+template<InputIterator InIter, RandomAccessIterator RAIter>
requires HasCopyAssign<RAIter::reference, InIter::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> \&\&}@
+ 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, @\removedCC{Mutable}@RandomAccessIterator RAIter, class Compare>
+template<InputIterator InIter, RandomAccessIterator RAIter, class Compare>
requires HasCopyAssign<RAIter::reference, InIter::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> \&\&}@
+ SwappableIterator<RAIter> &&
Predicate<Compare, InIter::value_type, RAIter::value_type> &&
Predicate<Compare, RAIter::value_type, InIter::value_type> &&
Predicate<Compare, RAIter::value_type>
@@ -2706,19 +2637,15 @@
\index{nth_element@\tcode{nth_element}}%
\color{addclr}\begin{itemdecl}
-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> \&\&}@
+template<RandomAccessIterator Iter>
+ requires SwappableIterator<Iter> &&
LessThanComparable<Iter::value_type>
void nth_element(Iter @\farg{first}@, Iter @\farg{nth}@,
Iter @\farg{last}@);
-template<@\removedCC{Mutable}@RandomAccessIterator Iter,
+template<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>}@
+ requires SwappableIterator<Iter>
void nth_element(Iter @\farg{first}@, Iter @\farg{nth}@,
Iter @\farg{last}@, Compare @\farg{comp}@);
\end{itemdecl}\color{black}
@@ -3061,20 +2988,16 @@
\index{inplace_merge@\tcode{inplace_merge}}%
\color{addclr}\begin{itemdecl}
-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> \&\&}@
+template<BidirectionalIterator Iter>
+ requires SwappableIterator<Iter> &&
LessThanComparable<Iter::value_type>
void inplace_merge(Iter @\farg{first}@,
Iter @\farg{middle}@,
Iter @\farg{last}@);
-template<@\removedCC{Mutable}@BidirectionalIterator Iter,
+template<BidirectionalIterator 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>}@
+ requires SwappableIterator<Iter>
void inplace_merge(Iter @\farg{first}@,
Iter @\farg{middle}@,
Iter @\farg{last}@, Compare @\farg{comp}@);
@@ -3433,15 +3356,13 @@
\index{push_heap@\tcode{push_heap}}%
\color{addclr}\begin{itemdecl}
-template<@\removedCC{Mutable}@RandomAccessIterator Iter>
- requires @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type> \&\&}@
- @\addedCC{SwappableIterator<Iter> \&\&}@
+template<RandomAccessIterator Iter>
+ requires SwappableIterator<Iter> &&
LessThanComparable<Iter::value_type>
void push_heap(Iter @\farg{first}@, Iter @\farg{last}@);
-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>}@
+template<RandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
+ requires SwappableIterator<Iter>
void push_heap(Iter @\farg{first}@, Iter @\farg{last}@,
Compare @\farg{comp}@);
\end{itemdecl}\color{black}
@@ -3476,16 +3397,12 @@
\index{pop_heap@\tcode{pop_heap}}%
\color{addclr}\begin{itemdecl}
-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>
+template<RandomAccessIterator Iter>
+ requires SwappableIterator<Iter> && LessThanComparable<Iter::value_type>
void pop_heap(Iter @\farg{first}@, Iter @\farg{last}@);
-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>}@
+template<RandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
+ requires SwappableIterator<Iter>
void pop_heap(Iter @\farg{first}@, Iter @\farg{last}@,
Compare @\farg{comp}@);
\end{itemdecl}\color{black}
@@ -3524,15 +3441,13 @@
\index{make_heap@\tcode{make_heap}}%
\color{addclr}\begin{itemdecl}
-template<@\removedCC{Mutable}@RandomAccessIterator Iter>
- requires @\removedCC{MoveConstructible<Iter::value_type> \&\& MoveAssignable<Iter::value_type> \&\&}@
- @\addedCC{SwappableIterator<Iter> \&\&}@
+template<RandomAccessIterator Iter>
+ requires SwappableIterator<Iter> &&
LessThanComparable<Iter::value_type>
void make_heap(Iter @\farg{first}@, Iter @\farg{last}@);
-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>}@
+template<RandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
+ requires SwappableIterator<Iter>
void make_heap(Iter @\farg{first}@, Iter @\farg{last}@,
Compare @\farg{comp}@);
\end{itemdecl}\color{black}
@@ -3561,15 +3476,12 @@
\index{sort_heap@\tcode{sort_heap}}%
\color{addclr}\begin{itemdecl}
-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>
+template<RandomAccessIterator Iter>
+ requires SwappableIterator<Iter> && LessThanComparable<Iter::value_type>
void sort_heap(Iter @\farg{first}@, Iter @\farg{last}@);
-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>}@
+template<RandomAccessIterator Iter, Predicate<auto, Iter::value_type, Iter::value_type> Compare>
+ requires SwappableIterator<Iter>
void sort_heap(Iter @\farg{first}@, Iter @\farg{last}@,
Compare @\farg{comp}@);
\end{itemdecl}\color{black}
@@ -3651,7 +3563,7 @@
\color{addclr}\begin{itemdecl}
template<LessThanComparable T> const T& min(const T& @\farg{a}@, const T& @\farg{b}@);
template<class T, Predicate<auto, T, T> Compare>
- @\addedCC{requires !SameType<T, Compare>}@
+ requires !SameType<T, Compare>
const T& min(const T& @\farg{a}@, const T& @\farg{b}@, Compare @\farg{comp}@);
\end{itemdecl}\color{black}
@@ -3673,15 +3585,15 @@
\end{itemdescr}
\begin{itemdecl}
-@\removedCC{template<LessThanComparable T> const T\& min(const T\& \mbox{\farg{a}}, const T\& \mbox{\farg{b}}, const T\& \mbox{\farg{c}});}@
-@\addedCC{template<LessThanComparable T, LessThanComparable... Args>}@
- @\addedCC{requires SameType<T, Args>...}@
- @\addedCC{const T\& min(const T\& \mbox{\farg{a}}, const Args\&... \mbox{\farg{args}});}@
+@\removedConcepts{template<LessThanComparable T> const T\& min(const T\& \mbox{\farg{a}}, const T\& \mbox{\farg{b}}, const T\& \mbox{\farg{c}});}@
+@\addedConcepts{template<LessThanComparable T, LessThanComparable... Args>}@
+ @\addedConcepts{requires SameType<T, Args>...}@
+ @\addedConcepts{const T\& min(const T\& \mbox{\farg{a}}, const Args\&... \mbox{\farg{args}});}@
\end{itemdecl}
\begin{itemdescr}
\pnum
-\removedCC{\mbox{\requires} Type \mbox{\tcode{T}} is
+\removedConcepts{\mbox{\requires} Type \mbox{\tcode{T}} is
\mbox{\tcode{LessThanComparable}}, and all types forming
\mbox{\tcode{Args...}} are the same as \mbox{\tcode{T}}.}
@@ -3732,7 +3644,7 @@
\color{addclr}\begin{itemdecl}
template<LessThanComparable T> const T& max(const T& @\farg{a}@, const T& @\farg{b}@);
template<class T, Predicate<auto, T, T> Compare>
- @\addedCC{requires !SameType<T, Compare>}@
+ @\addedConcepts{requires !SameType<T, Compare>}@
const T& max(const T& @\farg{a}@, const T& @\farg{b}@, Compare @\farg{comp}@);
\end{itemdecl}\color{black}
@@ -3754,15 +3666,15 @@
\end{itemdescr}
\begin{itemdecl}
-@\removedCC{template<LessThanComparable T> const T\& max(const T\& \mbox{\farg{a}}, const T\& \mbox{\farg{b}}, const T\& \mbox{\farg{c}});}@
-@\addedCC{template<LessThanComparable T, LessThanComparable... Args>}@
- @\addedCC{requires SameType<T, Args>...}@
- @\addedCC{const T\& max(const T\& \mbox{\farg{a}}, const Args\&... \mbox{\farg{args}});}@
+@\removedConcepts{template<LessThanComparable T> const T\& max(const T\& \mbox{\farg{a}}, const T\& \mbox{\farg{b}}, const T\& \mbox{\farg{c}});}@
+@\addedConcepts{template<LessThanComparable T, LessThanComparable... Args>}@
+ @\addedConcepts{requires SameType<T, Args>...}@
+ @\addedConcepts{const T\& max(const T\& \mbox{\farg{a}}, const Args\&... \mbox{\farg{args}});}@
\end{itemdecl}
\begin{itemdescr}
\pnum
-\removedCC{\mbox{\requires} Type \mbox{\tcode{T}} is
+\removedConcepts{\mbox{\requires} Type \mbox{\tcode{T}} is
\mbox{\tcode{LessThanComparable}}, and all types forming
\mbox{\tcode{Args...}} are the same as \mbox{\tcode{T}}.}
@@ -3808,7 +3720,7 @@
\begin{itemdecl}
template<LessThanComparable T> pair<const T&, const T&> minmax(const T& @\farg{a}@, const T& @\farg{b}@);
template<class T, Predicate<auto, T, T> Compare>
- @\addedCC{requires !SameType<T, Compare>}@
+ @\addedConcepts{requires !SameType<T, Compare>}@
@\textcolor{addclr}{pair}@<const T&, const T&> minmax(const T& @\farg{a}@, const T& @\farg{b}@, Compare @\farg{comp}@);
\end{itemdecl}
\color{black}
@@ -3837,16 +3749,16 @@
\end{itemdescr}
\begin{itemdecl}
-@\removedCC{template<LessThanComparable T>}@
- @\removedCC{pair<const T\&, const T\&> minmax(const T\& \mbox{\farg{a}}, const T\& \mbox{\farg{b}}, const T\& \mbox{\farg{c}});}@
-@\addedCC{template<LessThanComparable T, LessThanComparable... Args>}@
- @\addedCC{requires SameType<T, Args>...}@
- @\addedCC{pair<const T\&, const T\&> minmax(const T\& \mbox{\farg{a}}, const Args\&... \mbox{\farg{args}});}@
+@\removedConcepts{template<LessThanComparable T>}@
+ @\removedConcepts{pair<const T\&, const T\&> minmax(const T\& \mbox{\farg{a}}, const T\& \mbox{\farg{b}}, const T\& \mbox{\farg{c}});}@
+@\addedConcepts{template<LessThanComparable T, LessThanComparable... Args>}@
+ @\addedConcepts{requires SameType<T, Args>...}@
+ @\addedConcepts{pair<const T\&, const T\&> minmax(const T\& \mbox{\farg{a}}, const Args\&... \mbox{\farg{args}});}@
\end{itemdecl}
\begin{itemdescr}
\pnum
-\removedCC{\mbox{\requires} Type \mbox{\tcode{T}} is
+\removedConcepts{\mbox{\requires} Type \mbox{\tcode{T}} is
\mbox{\tcode{LessThanComparable}}, and all types forming
\mbox{\tcode{Args...}} are the same as \mbox{\tcode{T}}.}
@@ -4079,15 +3991,13 @@
\index{next_permutation@\tcode{next_permutation}}%
\color{addclr}\begin{itemdecl}
-template<@\removedCC{Mutable}@BidirectionalIterator Iter>
- requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type> \&\&}@
- @\addedCC{SwappableIterator<Iter>}@
+template<BidirectionalIterator Iter>
+ requires SwappableIterator<Iter>
@\textcolor{addclr}{LessThanComparable}@<Iter::reference>
bool next_permutation(Iter @\farg{first}@, Iter @\farg{last}@);
-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>}@
+template<BidirectionalIterator Iter, Predicate<auto, Iter::reference, Iter::reference> Compare>
+ requires SwappableIterator<Iter>
@\textcolor{addclr}{bool}@ next_permutation(Iter @\farg{first}@, Iter @\farg{last}@, Compare @\farg{comp}@);
\end{itemdecl}\color{black}
@@ -4121,15 +4031,13 @@
\index{prev_permutation@\tcode{prev_permutation}}%
\color{addclr}\begin{itemdecl}
-template<@\removedCC{Mutable}@BidirectionalIterator Iter>
- requires @\removedCC{SameType<Iter::value_type\&, Iter::reference> \&\& Swappable<Iter::value_type> \&\&}@
- @\addedCC{SwappableIterator<Iter>}@
+template<BidirectionalIterator Iter>
+ requires SwappableIterator<Iter>
@\textcolor{addclr}{}@LessThanComparable<Iter::reference>
bool prev_permutation(Iter @\farg{first}@, Iter @\farg{last}@);
-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>}@
+template<BidirectionalIterator Iter, Predicate<auto, Iter::reference, Iter::reference> Compare>
+ requires SwappableIterator<Iter>
bool prev_permutation(Iter @\farg{first}@, Iter @\farg{last}@, Compare @\farg{comp}@);
\end{itemdecl}\color{black}
Modified: sandbox/committee/concepts/stdlib/clib-concepts.tex
==============================================================================
--- sandbox/committee/concepts/stdlib/clib-concepts.tex (original)
+++ sandbox/committee/concepts/stdlib/clib-concepts.tex 2008-06-09 16:45:52 EDT (Mon, 09 Jun 2008)
@@ -561,11 +561,6 @@
\end{itemdescr}
\rSec2[concept.comparison]{Comparisons}
-\begin{itemdescr}
-\pnum
-\addedConcepts{\mbox{\reallynote} describes types with an operator <.}
-\end{itemdescr}
-
\begin{itemdecl}
auto concept LessThanComparable<typename T> : HasLess<T> {
bool operator>(T const& a, T const& b) { return b < a; }
Modified: sandbox/committee/concepts/stdlib/macros.tex
==============================================================================
--- sandbox/committee/concepts/stdlib/macros.tex (original)
+++ sandbox/committee/concepts/stdlib/macros.tex 2008-06-09 16:45:52 EDT (Mon, 09 Jun 2008)
@@ -1103,6 +1103,8 @@
\newcommand{\addedCC}[1]{\textcolor{ccadd}{\ul{#1}}}
\newcommand{\removedCC}[1]{\textcolor{remclr}{\st{#1}}}
\newcommand{\changedCC}[2]{\removedCC{#1}\addedCC{#2}}
+\newcommand{\changedCCC}[2]{\textcolor{addclr}{\st{#1}}\addedCC{#2}}
+\newcommand{\removedCCC}[1]{\textcolor{addclr}{\st{#1}}}
\newcommand{\remitemCC}[1]{\remitem{#1}}
\newcommand{\additemCC}[1]{\item\addedCC{#1}}
Modified: sandbox/committee/concepts/wording/wording.tex
==============================================================================
--- sandbox/committee/concepts/wording/wording.tex (original)
+++ sandbox/committee/concepts/wording/wording.tex 2008-06-09 16:45:52 EDT (Mon, 09 Jun 2008)
@@ -1926,7 +1926,7 @@
void h() const &; // OK
void h() &&; // OK, all declarations have a ref-qualifier
void i() &;
- void f() const; // ill-formed, prior declaration of i
+ void i() const; // ill-formed, prior declaration of i
@\textcolor{black}{}@// has a ref-qualifier
};
\end{codeblock}
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk