|
Boost-Commit : |
From: dgregor_at_[hidden]
Date: 2008-08-19 17:25:56
Author: dgregor
Date: 2008-08-19 17:25:55 EDT (Tue, 19 Aug 2008)
New Revision: 48229
URL: http://svn.boost.org/trac/boost/changeset/48229
Log:
Fixed/simplified tuple and pair constructors, tweaked some layout
Text files modified:
sandbox/committee/concepts/stdlib/clib-utilities.tex | 235 +++++++++++++++++++++++----------------
1 files changed, 136 insertions(+), 99 deletions(-)
Modified: sandbox/committee/concepts/stdlib/clib-utilities.tex
==============================================================================
--- sandbox/committee/concepts/stdlib/clib-utilities.tex (original)
+++ sandbox/committee/concepts/stdlib/clib-utilities.tex 2008-08-19 17:25:55 EDT (Tue, 19 Aug 2008)
@@ -82,6 +82,8 @@
\tcode{ConstructibleWithAllocator} in \tcode{pair} and \tcode{tuple}.
\item Fixed the \tcode{UsesAllocator} concept maps for \tcode{pair},
\tcode{tuple}, and \tcode{function}.
+\item Clarified and updates \tcode{pair} and \tcode{tuple}'s allocator
+ constructors.
\end{itemize}
\end{titlepage}
@@ -188,8 +190,8 @@
void swap(pair<T1,T2>&&, pair<T1,T2>&);
template <@\changedConcepts{class}{Swappable}@ T1, @\changedConcepts{class}{Swappable}@ T2>
void swap(pair<T1,T2>&, pair<T1,T2>&&);
- template <@\changedConcepts{class}{MoveConstructible}@ T1,
- @\changedConcepts{class}{MoveConstructible}@ T2> pair<V1, V2> make_pair(T1&&, T2&&);
+ template <@\changedConcepts{class}{MoveConstructible}@ T1, @\changedConcepts{class}{MoveConstructible}@ T2>
+ pair<V1, V2> make_pair(T1&&, T2&&);
// \ptr\ref{pairs}, tuple-like access to pair:
template <@\changedConcepts{class}{ObjectType}@ T> class tuple_size;
@@ -354,7 +356,7 @@
template<class @\farg{U}@, class @\farg{V}@>
@\addedConcepts{requires Constructible<T1, U\&\&> \&\& Constructible<T2, V\&\&>}@
pair(U&& @\farg{x}@, V&& @\farg{y}@);
- @\addedConcepts{requires MoveConstructible<T1> \&\& MoveConstructible<T2>}@ pair(pair&& @\farg{p}@);
+ @\removedConcepts{pair(pair\&\& \mbox{\farg{p}});}@
template<class @\farg{U}@, class @\farg{V}@>
@\addedConcepts{requires Constructible<T1, U> \&\& Constructible<T2, V>}@
pair(const pair<@\farg{U}@, @\farg{V}@>& @\farg{p}@);
@@ -369,26 +371,23 @@
template<@\changedConcepts{class}{Allocator} Alloc@>
@\addedConcepts{requires ConstructibleWithAllocator<T1, Alloc> \&\& ConstructibleWithAllocator<T2, Alloc>}@
pair(allocator_arg_t, const Alloc& a);
- template<@\changedConcepts{class}{Allocator} Alloc@>
- @\addedConcepts{requires ConstructibleWithAllocator<T1, Alloc, const T1\&>}@
- @\addedConcepts{\&\& ConstructibleWithAllocator<T2, Alloc, const T2\&>}@
- pair(allocator_arg_t, const Alloc& a, const T1& @\farg{x}@, const T2& @\farg{y}@);
- template<class @\farg{U}@, class @\farg{V}@, @\changedConcepts{class}{Allocator} Alloc@>
- @\addedConcepts{requires ConstructibleWithAllocator<T1, Alloc, U\&\&> \&\& ConstructibleWithAllocator<T2, Alloc, V\&\&>}@
- pair(allocator_arg_t, const Alloc& a, U&& @\farg{x}@, V&& @\farg{y}@);
- template<@\changedConcepts{class}{Allocator} Alloc@>
- @\addedConcepts{requires ConstructibleWithAllocator<T1, Alloc, T1\&\&> \&\& ConstructibleWithAllocator<T2, Alloc, T2\&\&>}@
- pair(allocator_arg_t, const Alloc& a, pair&& @\farg{p}@);
+ @\removedConcepts{template<class Alloc>}@
+ @\removedConcepts{pair(allocator_arg_t, const Alloc\& a, const T1\& \mbox{\farg{x}}, const T2\& \mbox{\farg{y}});}@
+ @\removedConcepts{template<class U, class V, class Alloc>}@
+ @\removedConcepts{pair(allocator_arg_t, const Alloc\& a, U\&\& \mbox{\farg{x}}, V\&\& \mbox{\farg{y}});}@
+ @\removedConcepts{template<class Alloc>}@
+ @\removedConcepts{pair(allocator_arg_t, const Alloc\& a, pair\&\& \mbox{\farg{p}});}@
template<class @\farg{U}@, class @\farg{V}@, @\changedConcepts{class}{Allocator} Alloc@>
@\addedConcepts{requires ConstructibleWithAllocator<T1, Alloc, const U\&>}@
- @\addedConcepts{\&\& ConstructibleWithAllocator<T2, Alloc, const V\&>}@
+ @\addedConcepts{\&\& ConstructibleWithAllocator<T2, Alloc, const V\&>}@
pair(allocator_arg_t, const Alloc& a, const pair<@\farg{U}@, @\farg{V}@>& @\farg{p}@);
template<class @\farg{U}@, class @\farg{V}@, @\changedConcepts{class}{Allocator} Alloc@>
- @\addedConcepts{requires ConstructibleWithAllocator<T1, Alloc, U\&\&> \&\& ConstructibleWithAllocator<T2, Alloc, V\&\&>}@
+ @\addedConcepts{requires ConstructibleWithAllocator<T1, Alloc, U\&\&>}@
+ @\addedConcepts{\&\& ConstructibleWithAllocator<T2, Alloc, V\&\&>}@
pair(allocator_arg_t, const Alloc& a, pair<@\farg{U}@, @\farg{V}@>&& @\farg{p}@);
template<class @\farg{U}@, class... @\farg{Args}@, @\changedConcepts{class}{Allocator} Alloc@>
@\addedConcepts{requires ConstructibleWithAllocator<T1, Alloc, U\&\&>}@
- @\addedConcepts{\&\& ConstructibleWithAllocator<T2, Alloc, Args\&\&...>}@
+ @\addedConcepts{\&\& ConstructibleWithAllocator<T2, Alloc, Args\&\&...>}@
pair(allocator_arg_t, const Alloc& a, U&& @\farg{x}@, Args&&... @\farg{args}@);
@\addedConcepts{requires MoveAssignable<T1> \&\& MoveAssignable<T2>}@ pair& operator=(pair&& p );
@@ -466,20 +465,20 @@
\mbox{\effects}
The constructor initializes \mbox{\tcode{first}} with
\mbox{\tcode{std::forward<U>(\farg{x})}} and \mbox{\tcode{second}}
-with \mbox{\tcode{std::forward<T>(\farg{y})}}.
+with \mbox{\tcode{std::forward<V>(\farg{y})}}.
\end{itemdescr}
\begin{itemdecl}
-@\addedConcepts{requires MoveConstructible<T1> \&\& MoveConstructible<T2>}@ pair(pair&& @\farg{p}@);
+@\removedConcepts{pair(pair\&\& \mbox{\farg{p}});}@
\end{itemdecl}
\begin{itemdescr}
\pnum
-\mbox{\effects}
+\removedConcepts{\mbox{\effects}
The constructor initializes \mbox{\tcode{first}} with
\mbox{\tcode{std::move(\farg{p}.first)}}
and \mbox{\tcode{second}} with
-\mbox{\tcode{std::move(\farg{p}.second)}}.
+\mbox{\tcode{std::move(\farg{p}.second)}}.}
\end{itemdescr}
\begin{itemdecl}
@@ -527,35 +526,77 @@
template<@\changedConcepts{class}{Allocator} Alloc@>
@\addedConcepts{requires ConstructibleWithAllocator<T1, Alloc> \&\& ConstructibleWithAllocator<T2, Alloc>}@
pair(allocator_arg_t, const Alloc& a);
-template<@\changedConcepts{class}{Allocator} Alloc@>
- @\addedConcepts{requires ConstructibleWithAllocator<T1, Alloc, const T1\&>}@
- @\addedConcepts{\&\& ConstructibleWithAllocator<T2, Alloc, const T2\&>}@
- pair(allocator_arg_t, const Alloc& a, const T1& @\farg{x}@, const T2& @\farg{y}@);
-template<class @\farg{U}@, class @\farg{V}@, @\changedConcepts{class}{Allocator} Alloc@>
- @\addedConcepts{requires ConstructibleWithAllocator<T1, Alloc, U\&\&> \&\& ConstructibleWithAllocator<T2, Alloc, V\&\&>}@
- pair(allocator_arg_t, const Alloc& a, U&& @\farg{x}@, V&& @\farg{y}@);
-template<@\changedConcepts{class}{Allocator} Alloc@>
- @\addedConcepts{requires ConstructibleWithAllocator<T1, Alloc, T1\&\&> \&\& ConstructibleWithAllocator<T2, Alloc, T2\&\&>}@
- pair(allocator_arg_t, const Alloc& a, pair&& @\farg{p}@);
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\effects} The members \mbox{\tcode{first}} and
+ \mbox{\tcode{second}} are each constructed as
+ \mbox{\tcode{ConstructibleWithAllocator}} objects with constructor
+ arguments \mbox{\tcode{(allocator_arg_t(), a)}}.}
+\end{itemdescr}
+
+\begin{itemdecl}
+@\removedConcepts{template<class Alloc>}@
+ @\removedConcepts{pair(allocator_arg_t, const Alloc\& a, const T1\& \mbox{\farg{x}}, const T2\& \mbox{\farg{y}});}@
+@\removedConcepts{template<class U, class V, class Alloc>}@
+ @\removedConcepts{pair(allocator_arg_t, const Alloc\& a, U\&\& \mbox{\farg{x}}, V\&\& \mbox{\farg{y}});}@
+@\removedConcepts{template<class Alloc>}@
+ @\removedConcepts{pair(allocator_arg_t, const Alloc\& a, pair\&\& \mbox{\farg{p}});}@
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\removedConcepts{\mbox{\requires} \mbox{\tcode{Alloc}} shall be an \mbox{\tcode{Allocator}}~(\mbox{\ref{allocator.requirements}}).}
+
+\pnum
+\removedConcepts{\mbox{\effects} The members \mbox{\tcode{first}} and \mbox{\tcode{second}} are both \mbox{\techterm{allocator constructed}}~(\mbox{\ref{allocator.concepts}}) with \mbox{\tcode{a}}.}
+\end{itemdescr}
+
+\begin{itemdecl}
template<class @\farg{U}@, class @\farg{V}@, @\changedConcepts{class}{Allocator} Alloc@>
@\addedConcepts{requires ConstructibleWithAllocator<T1, Alloc, const U\&>}@
- @\addedConcepts{\&\& ConstructibleWithAllocator<T2, Alloc, const V\&>}@
+ @\addedConcepts{\&\& ConstructibleWithAllocator<T2, Alloc, const V\&>}@
pair(allocator_arg_t, const Alloc& a, const pair<@\farg{U}@, @\farg{V}@>& @\farg{p}@);
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\effects} The members \mbox{\tcode{first}} and
+ \mbox{\tcode{second}} are each constructed as
+ \mbox{\tcode{ConstructibleWithAllocator}} objects with constructor
+ arguments \mbox{\tcode{(allocator_arg_t(), a, p.first)}} and \mbox{\tcode{(allocator_arg_t(), a, p.second)}}, respectively.}
+\end{itemdescr}
+
+\begin{itemdecl}
template<class @\farg{U}@, class @\farg{V}@, @\changedConcepts{class}{Allocator} Alloc@>
@\addedConcepts{requires ConstructibleWithAllocator<T1, Alloc, U\&\&> \&\& ConstructibleWithAllocator<T2, Alloc, V\&\&>}@
pair(allocator_arg_t, const Alloc& a, pair<@\farg{U}@, @\farg{V}@>&& @\farg{p}@);
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\effects} The members \mbox{\tcode{first}} and
+ \mbox{\tcode{second}} are each constructed as
+ \mbox{\tcode{ConstructibleWithAllocator}} objects with constructor
+ arguments \mbox{\tcode{(allocator_arg_t(), a, std::move(p.first))}} and \mbox{\tcode{(allocator_arg_t(), a,}}}\\
+\addedConcepts{\mbox{\tcode{std::move(p.second))}}, respectively.}
+\end{itemdescr}
+
+\begin{itemdecl}
template<class @\farg{U}@, class... @\farg{Args}@, @\changedConcepts{class}{Allocator} Alloc@>
@\addedConcepts{requires ConstructibleWithAllocator<T1, Alloc, U\&\&>}@
- @\addedConcepts{\&\& ConstructibleWithAllocator<T2, Alloc, Args\&\&...>}@
+ @\addedConcepts{\&\& ConstructibleWithAllocator<T2, Alloc, Args\&\&...>}@
pair(allocator_arg_t, const Alloc& a, U&& @\farg{x}@, Args&&... @\farg{args}@);
\end{itemdecl}
\begin{itemdescr}
\pnum
-\removedConcepts{\mbox{\requires} \mbox{\tcode{Alloc}} shall be an \mbox{\tcode{Allocator}}~(\mbox{\ref{allocator.requirements}}).}
-
-\pnum
-\mbox{\effects} The members \mbox{\tcode{first}} and \mbox{\tcode{second}} are both \mbox{\techterm{allocator constructed}}~(\mbox{\ref{allocator.concepts}}) with \mbox{\tcode{a}}.
+\addedConcepts{\mbox{\effects} The members \mbox{\tcode{first}} and
+ \mbox{\tcode{second}} are each constructed as
+ \mbox{\tcode{ConstructibleWithAllocator}} objects with constructor
+ arguments \mbox{\tcode{(allocator_arg_t(), a, std::forward<U>(x))}} and \mbox{\tcode{(allocator_arg_t(), a,}}}\\
+\addedConcepts{\mbox{\tcode{std::forward<Args>(args)...)}}, respectively.}
\end{itemdescr}
\begin{itemdecl}
@@ -707,11 +748,11 @@
\index{get@\tcode{get}!pair@\tcode{pair}}%
\begin{itemdecl}
@\ptr_at_template<int I, class T1, class T2>
- @\addedConcepts{requires True<0 <= I \&\& I < 2>}@
+ @\addedConcepts{requires True<I < 2>}@
P& get(pair<T1, T2>&);
@\ptr_at_template<int I, class T1, class T2>
- @\addedConcepts{requires True<0 <= I \&\& I < 2>}@
+ @\addedConcepts{requires True<I < 2>}@
const P& get(const pair<T1, T2>&);
\end{itemdecl}
\begin{itemdescr}
@@ -814,13 +855,13 @@
{
public:
@\addedConcepts{requires DefaultConstructible<Types>...}@ tuple();
- @\addedConcepts{requires CopyConstructible<Types>...}@ explicit tuple(const Types&...);
+ @\removedConcepts{explicit tuple(const Types\&...);}@
template <class... UTypes>
@\addedConcepts{requires Constructible<Types, UTypes\&\&>...}@
explicit tuple(UTypes&&...);
@\addedConcepts{requires CopyConstructible<Types>...}@ tuple(const tuple&);
- @\addedConcepts{requires MoveConstructible<Types>...}@ tuple(tuple&&);
+ @\removedConcepts{tuple(tuple\&\&);}@
template <class... UTypes>
@\addedConcepts{requires Constructible<Types, UTypes>...}@
@@ -840,18 +881,15 @@
template <@\changedConcepts{class}{Allocator}@ Alloc>
@\addedConcepts{requires ConstructibleWithAllocator<Types, Alloc>...}@
tuple(allocator_arg_t, const Alloc& a);
- template <@\changedConcepts{class}{Allocator}@ Alloc>
- @\addedConcepts{requires ConstructibleWithAllocator<Types, Alloc, const Types\&>...}@
- explicit tuple(allocator_arg_t, const Alloc& a, const Types&...);
+ @\removedConcepts{template <class Alloc>}@
+ @\removedConcepts{explicit tuple(allocator_arg_t, const Alloc\& a, const Types\&...);}@
template <@\changedConcepts{class}{Allocator}@ Alloc, class... UTypes>
@\addedConcepts{requires ConstructibleWithAllocator<Types, Alloc, UTypes\&\&>...}@
explicit tuple(allocator_arg_t, const Alloc& a, UTypes&&...);
- template <@\changedConcepts{class}{Allocator}@ Alloc>
- @\addedConcepts{requires ConstructibleWithAllocator<Types, Alloc, const Types\&>...}@
- tuple(allocator_arg_t, const Alloc& a, const tuple&);
- template <@\changedConcepts{class}{Allocator}@ Alloc>
- @\addedConcepts{requires ConstructibleWithAllocator<Types, Alloc, Types\&\&>...}@
- tuple(allocator_arg_t, const Alloc& a, tuple&&);
+ @\removedConcepts{template <class Alloc>}@
+ @\removedConcepts{tuple(allocator_arg_t, const Alloc\& a, const tuple\&);}@
+ @\removedConcepts{template <class Alloc>}@
+ @\removedConcepts{tuple(allocator_arg_t, const Alloc\& a, tuple\&\&);}@
template <@\changedConcepts{class}{Allocator}@ Alloc, class... UTypes>
@\addedConcepts{requires ConstructibleWithAllocator<Types, Alloc, const UTypes\&>...}@
tuple(allocator_arg_t, const Alloc& a, const tuple<UTypes...>&);
@@ -866,20 +904,20 @@
tuple(allocator_arg_t, const Alloc& a, pair<@\changedConcepts{U1, U2}{UTypes...}@>&&);
@\addedConcepts{requires CopyAssignable<Types>...}@ tuple& operator=(const tuple&);
- @\addedConcepts{requires MoveAssignable<Types>...}@ tuple& operator=(tuple&&);
+ @\removedConcepts{tuple\& operator=(tuple\&\&);}@
template <class... UTypes>
- @\addedConcepts{requires HasCopyAssign<Types, UTypes>...}@
+ @\addedConcepts{requires HasAssign<Types, const UTypes\&>...}@
tuple& operator=(const tuple<@\addedD{UTypes...}@>&);
template <class... UTypes>
- @\addedConcepts{requires HasMoveAssign<Types, UTypes>...}@
+ @\addedConcepts{requires HasAssign<Types, RvalueOf<UTypes>::type>...}@
tuple& operator=(tuple<UTypes...>&&);
template <@\changedConcepts{class U1, class U2}{class... UTypes}@>
- @\addedConcepts{requires HasCopyAssign<Types, UTypes>...}@
+ @\addedConcepts{requires HasAssign<Types, const UTypes\&>...}@
tuple& operator=(const pair<@\changedConcepts{U1, U2}{UTypes...}@>&); @\removedConcepts{// iff \mbox{\tcode{sizeof...(Types) == 2}}}@
template <@\changedConcepts{class U1, class U2}{class... UTypes}@>
- @\addedConcepts{requires HasMoveAssign<Types, UTypes>...}@
+ @\addedConcepts{requires HasAssign<Types, RvalueOf<UTypes>::type>...}@
tuple& operator=(pair<@\changedConcepts{U1, U2}{UTypes...}@>&&); @\removedConcepts{// iff \mbox{\tcode{sizeof...(Types) == 2}}}@
};
@@ -909,7 +947,7 @@
\index{tuple@\tcode{tuple}!tuple@\tcode{tuple}}%
\begin{itemdecl}
-@\addedConcepts{requires CopyConstructible<Types>...}@ tuple(@\addedD{const Types\&...}@);
+@\removedConcepts{tuple(const Types\&...);}@
\end{itemdecl}
\begin{itemdescr}
@@ -958,7 +996,7 @@
\index{tuple@\tcode{tuple}!tuple@\tcode{tuple}}%
\begin{itemdecl}
-@\addedConcepts{requires MoveConstructible<Types>...}@ @\addedD{tuple(tuple\&\& u);}@
+@\removedConcepts{tuple(tuple\&\& u);}@
\end{itemdecl}
\begin{itemdescr}
@@ -967,7 +1005,7 @@
move constructible.}
\pnum
-\addedD{\mbox{\effects} Move-constructs each element of \mbox{\tcode{*this}}
+\removedConcepts{\mbox{\effects} Move-constructs each element of \mbox{\tcode{*this}}
with the corresponding element of \mbox{\tcode{u}}.}
\end{itemdescr}
@@ -1155,7 +1193,7 @@
\index{pair@\tcode{pair}}%
\begin{itemdecl}
template <@\changedConcepts{class U1, class U2}{class... UTypes}@>
- @\addedConcepts{requires HasCopyAssign<Types, UTypes>...}@
+ @\addedConcepts{requires HasAssign<Types, const UTypes\&>...}@
tuple& operator=(const pair<@\changedConcepts{U1, U2}{UTypes...}@>&);
\end{itemdecl}
@@ -1197,7 +1235,7 @@
\index{pair@\tcode{pair}}%
\begin{itemdecl}
template <@\changedConcepts{class U1, class U2}{class... UTypes}@>
- @\addedConcepts{requires HasMoveAssign<Types, UTypes>...}@
+ @\addedConcepts{requires HasAssign<Types, RvalueOf<UTypes>::type>...}@
tuple& operator=(pair<@\changedConcepts{U1, U2}{UTypes...}@>&&);
\end{itemdecl}
@@ -1220,18 +1258,15 @@
template <@\changedConcepts{class}{Allocator}@ Alloc>
@\addedConcepts{requires ConstructibleWithAllocator<Types, Alloc>...}@
tuple(allocator_arg_t, const Alloc& a);
-template <@\changedConcepts{class}{Allocator}@ Alloc>
- @\addedConcepts{requires ConstructibleWithAllocator<Types, Alloc, const Types\&>...}@
- explicit tuple(allocator_arg_t, const Alloc& a, const Types&...);
+@\removedConcepts{template <class Alloc>}@
+ @\removedConcepts{explicit tuple(allocator_arg_t, const Alloc\& a, const Types\&...);}@
template <@\changedConcepts{class}{Allocator}@ Alloc, class... UTypes>
@\addedConcepts{requires ConstructibleWithAllocator<Types, Alloc, UTypes\&\&>...}@
explicit tuple(allocator_arg_t, const Alloc& a, UTypes&&...);
-template <@\changedConcepts{class}{Allocator}@ Alloc>
- @\addedConcepts{requires ConstructibleWithAllocator<Types, Alloc, const Types\&>...}@
- tuple(allocator_arg_t, const Alloc& a, const tuple&);
-template <@\changedConcepts{class}{Allocator}@ Alloc>
- @\addedConcepts{requires ConstructibleWithAllocator<Types, Alloc, Types\&\&>...}@
- tuple(allocator_arg_t, const Alloc& a, tuple&&);
+@\removedConcepts{template <class Alloc>}@
+ @\removedConcepts{tuple(allocator_arg_t, const Alloc\& a, const tuple\&);}@
+@\removedConcepts{template <Allocator Alloc>}@
+ @\removedConcepts{tuple(allocator_arg_t, const Alloc\& a, tuple\&\&);}@
template <@\changedConcepts{class}{Allocator}@ Alloc, class... UTypes>
@\addedConcepts{requires ConstructibleWithAllocator<Types, Alloc, const UTypes\&>...}@
tuple(allocator_arg_t, const Alloc& a, const tuple<UTypes...>&);
@@ -1951,7 +1986,7 @@
\index{equal_to@\tcode{equal_to}}%
\begin{itemdecl}
template <class T> struct equal_to : binary_function<T,T,bool> {
- @\addedConcepts{requires EqualityComparable<T>}@
+ @\addedConcepts{requires HasEqualTo<T, T>}@
bool operator()(const T& @\farg{x}@, const T& @\farg{y}@) const;
};
\end{itemdecl}
@@ -1964,7 +1999,7 @@
\index{not_equal_to@\tcode{not_equal_to}}%
\begin{itemdecl}
template <class T> struct not_equal_to : binary_function<T,T,bool> {
- @\addedConcepts{requires EqualityComparable<T>}@
+ @\addedConcepts{requires HasNotEqualTo<T, T>}@
bool operator()(const T& @\farg{x}@, const T& @\farg{y}@) const;
};
\end{itemdecl}
@@ -1977,7 +2012,7 @@
\index{greater@\tcode{greater}}%
\begin{itemdecl}
template <class T> struct greater : binary_function<T,T,bool> {
- @\addedConcepts{requires LessThanComparable<T>}@
+ @\addedConcepts{requires HasGreater<T, T>}@
bool operator()(const T& @\farg{x}@, const T& @\farg{y}@) const;
};
\end{itemdecl}
@@ -1990,7 +2025,7 @@
\index{less@\tcode{less}}%
\begin{itemdecl}
template <class T> struct less : binary_function<T,T,bool> {
- @\addedConcepts{requires LessThanComparable<T>}@
+ @\addedConcepts{requires HasLess<T, T>}@
bool operator()(const T& @\farg{x}@, const T& @\farg{y}@) const;
};
\end{itemdecl}
@@ -2003,7 +2038,7 @@
\index{greater_equal@\tcode{greater_equal}}%
\begin{itemdecl}
template <class T> struct greater_equal : binary_function<T,T,bool> {
- @\addedConcepts{requires LessThanComparable<T>}@
+ @\addedConcepts{requires HasGreaterEqual<T, T>}@
bool operator()(const T& @\farg{x}@, const T& @\farg{y}@) const;
};
\end{itemdecl}
@@ -2016,7 +2051,7 @@
\index{less_equal@\tcode{less_equal}}%
\begin{itemdecl}
template <class T> struct less_equal : binary_function<T,T,bool> {
- @\addedConcepts{requires LessThanComparable<T>}@
+ @\addedConcepts{requires HasLessEqual<T, T>}@
bool operator()(const T& @\farg{x}@, const T& @\farg{y}@) const;
};
\end{itemdecl}
@@ -2041,7 +2076,7 @@
\index{logical_and@\tcode{logical_and}}%
\begin{itemdecl}
template <class T> struct logical_and : binary_function<T,T,bool> {
- @\addedConcepts{requires HasLogicalAnd<T>}@
+ @\addedConcepts{requires HasLogicalAnd<T, T>}@
bool operator()(const T& @\farg{x}@, const T& @\farg{y}@) const;
};
\end{itemdecl}
@@ -2054,7 +2089,7 @@
\index{logical_or@\tcode{logical_or}}%
\begin{itemdecl}
template <class T> struct logical_or : binary_function<T,T,bool> {
- @\addedConcepts{requires HasLogicalOr<T>}@
+ @\addedConcepts{requires HasLogicalOr<T, T>}@
bool operator()(const T& @\farg{x}@, const T& @\farg{y}@) const;
};
\end{itemdecl}
@@ -2086,7 +2121,7 @@
\index{bit_and@\tcode{bit_and}}%
\begin{itemdecl}
template <class T> struct bit_and : binary_function<T,T,T> {
- @\addedConcepts{requires HasBitAnd<T>}@
+ @\addedConcepts{requires HasBitAnd<T, T>}@
T operator()(const T& x, const T& y) const;
};
\end{itemdecl}
@@ -2099,7 +2134,7 @@
\index{bit_or@\tcode{bit_or}}%
\begin{itemdecl}
template <class T> struct bit_or : binary_function<T,T,T> {
- @\addedConcepts{requires HasBitOr<T>}@
+ @\addedConcepts{requires HasBitOr<T, T>}@
T operator()(const T& x, const T& y) const;
};
\end{itemdecl}
@@ -2112,7 +2147,7 @@
\index{bit_xor@\tcode{bit_xor}}%
\begin{itemdecl}
template <class T> struct bit_xor : binary_function<T,T,T> {
- @\addedConcepts{requires HasBitXor<T>}@
+ @\addedConcepts{requires HasBitXor<T, T>}@
T operator()(const T& x, const T& y) const;
};
\end{itemdecl}
@@ -2520,12 +2555,12 @@
function(const function&);
@\addedD{function(function\&\&);}@
template<class F>
- @\addedConcepts{requires CopyConstructible<F> \&\& Callable<F, ArgTypes...> \&\&}@
- @\addedConcepts{Convertible<Callable<F, ArgTypes...>::result_type, R>}@
+ @\addedConcepts{requires CopyConstructible<F> \&\& Callable<F, ArgTypes...>}@
+ @\addedConcepts{\&\& Convertible<Callable<F, ArgTypes...>::result_type, R>}@
function(F);
template<class F>
- @\addedConcepts{requires CopyConstructible<F> \&\& Callable<F, ArgTypes...> \&\&}@
- @\addedConcepts{Convertible<Callable<F, ArgTypes...>::result_type, R>}@
+ @\addedConcepts{requires CopyConstructible<F> \&\& Callable<F, ArgTypes...>}@
+ @\addedConcepts{\&\& Convertible<Callable<F, ArgTypes...>::result_type, R>}@
function(F&&);
template<@\changedConcepts{class}{Allocator}@ A>
function(allocator_arg_t, const A&);
@@ -2542,16 +2577,16 @@
@\addedD{function\& operator=(function\&\&);}@
function& operator=(@\unspecnull@);
template<class F>
- @\addedConcepts{requires CopyConstructible<F> \&\& Callable<F, ArgTypes..> \&\&}@
- @\addedConcepts{Convertible<Callable<F, ArgTypes...>::result_type}@
+ @\addedConcepts{requires CopyConstructible<F> \&\& Callable<F, ArgTypes..>}@
+ @\addedConcepts{\&\& Convertible<Callable<F, ArgTypes...>::result_type}@
function& operator=(F);
template<class F>
- @\addedConcepts{requires CopyConstructible<F> \&\& Callable<F, ArgTypes...> \&\&}@
- @\addedConcepts{Convertible<Callable<F, ArgTypes...>::result_type, R>}@
+ @\addedConcepts{requires CopyConstructible<F> \&\& Callable<F, ArgTypes...>}@
+ @\addedConcepts{\&\& Convertible<Callable<F, ArgTypes...>::result_type, R>}@
function& operator=(F&&);
template<class F>
- @\addedConcepts{requires Callable<F, ArgTypes...> \&\&}@
- @\addedConcepts{Convertible<Callable<F, ArgTypes...>::result_type, R>}@
+ @\addedConcepts{requires Callable<F, ArgTypes...> }@
+ @\addedConcepts{\&\& Convertible<Callable<F, ArgTypes...>::result_type, R>}@
function& operator=(reference_wrapper<F>);
~function();
@@ -2559,8 +2594,8 @@
// \ref{func.wrap.func.mod}, function modifiers:
void swap(function&);
template<class F, @\changedConcepts{class}{Allocator}@ A>
- @\addedConcepts{requires Callable<F, ArgTypes...> \&\&}@
- @\addedConcepts{Convertible<Callable<F, ArgTypes...>::result_type, R>}@
+ @\addedConcepts{requires Callable<F, ArgTypes...> }@
+ @\addedConcepts{\&\& Convertible<Callable<F, ArgTypes...>::result_type, R>}@
void assign(F, const A&);
// \ref{func.wrap.func.cap}, function capacity:
@@ -2658,8 +2693,8 @@
\index{operator=@\tcode{operator=}!function@\tcode{function}}%
\begin{itemdecl}
template<class F>
- @\addedConcepts{requires CopyConstructible<F> \&\& Callable<F, ArgTypes..> \&\&}@
- @\addedConcepts{Convertible<Callable<F, ArgTypes...>::result_type}@
+ @\addedConcepts{requires CopyConstructible<F> \&\& Callable<F, ArgTypes..>}@
+ @\addedConcepts{\&\& Convertible<Callable<F, ArgTypes...>::result_type}@
operator=(F f);
\end{itemdecl}
@@ -2673,8 +2708,8 @@
\index{operator=@\tcode{operator=}!function@\tcode{function}}%
\begin{itemdecl}
template<class F>
- @\addedConcepts{requires CopyConstructible<F> \&\& Callable<F, ArgTypes..> \&\&}@
- @\addedConcepts{Convertible<Callable<F, ArgTypes...>::result_type}@
+ @\addedConcepts{requires CopyConstructible<F> \&\& Callable<F, ArgTypes..>}@
+ @\addedConcepts{\&\& Convertible<Callable<F, ArgTypes...>::result_type}@
function& operator=(F&& f);
\end{itemdecl}
@@ -2693,8 +2728,8 @@
\index{operator=@\tcode{operator=}!function@\tcode{function}}%
\begin{itemdecl}
template<class F>
- @\addedConcepts{requires CopyConstructible<F> \&\& Callable<F, ArgTypes...> \&\&}@
- @\addedConcepts{Convertible<Callable<F, ArgTypes...>::result_type, R>}@
+ @\addedConcepts{requires CopyConstructible<F> \&\& Callable<F, ArgTypes...>}@
+ @\addedConcepts{\&\& Convertible<Callable<F, ArgTypes...>::result_type, R>}@
function& operator=(reference_wrapper<F> f);
\end{itemdecl}
@@ -2792,8 +2827,10 @@
\index{function objects!wrapper|)}%
\section*{Acknowledgments}
-Daniel Kr\"ugler and Pablo Halpern provided helpful comments and
-corrections to this proposal.
+Daniel Kr\"ugler provided helpful comments and corrections to this
+proposal. Pablo Halpern provided simplifications to the \tcode{pair}
+and \tcode{tuple} constructors along with other helpful comments and
+corrections.
\bibliographystyle{plain}
\bibliography{local}
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