|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r48880 - sandbox/committee/concepts/stdlib
From: mmarcus_at_[hidden]
Date: 2008-09-19 04:42:35
Author: mmarcus
Date: 2008-09-19 04:42:34 EDT (Fri, 19 Sep 2008)
New Revision: 48880
URL: http://svn.boost.org/trac/boost/changeset/48880
Log:
Emplace and other Container changes
Text files modified:
sandbox/committee/concepts/stdlib/clib-containers.tex | 400 ++++++++++++++++++++++++++++++++-------
1 files changed, 321 insertions(+), 79 deletions(-)
Modified: sandbox/committee/concepts/stdlib/clib-containers.tex
==============================================================================
--- sandbox/committee/concepts/stdlib/clib-containers.tex (original)
+++ sandbox/committee/concepts/stdlib/clib-containers.tex 2008-09-19 04:42:34 EDT (Fri, 19 Sep 2008)
@@ -118,6 +118,11 @@
operations in \tcode{stack}, \tcode{queue}, and
\tcode{priority_queue} with \tcode{HasEmplaceBack}.}
\item{Removed all qualification by \tcode{std::}}
+\item{Backed out Emplace changes above. Added axioms to Emplacement concepts. Added \tcode{HasPushFront}, \tcode{HasPushBack},
+\tcode{HasInsert}. Added concept maps to model insertion by emplacement.}
+\item{Renamed \tcode{RandomAccessAllocator} to \tcode{Allocator}}
+\item{Added \tcode{cbegin} and \tcode{cend} operations and default implementations to
+ \tcode{Container}-related concepts}
\end{itemize}
\end{titlepage}
@@ -927,9 +932,12 @@
concept QueueLikeContainer<typename C> @\textit{see below}@
concept InsertionContainer<typename C> @\textit{see below}@
concept RangeInsertionContainer<typename C, typename Iter> @\textit{see below}@
- concept HasEmplaceBack<typename C, typename... Args> @\textit{see below}@
- concept HasEmplaceFront<typename C, typename... Args> @\textit{see below}@
- concept HasEmplace<typename C, typename... Args> @\textit{see below}@
+ concept FrontEmplacementContainer<typename C, typename... Args> @\textit{see below}@
+ concept BackEmplacementContainer<typename C, typename... Args> @\textit{see below}@
+ concept EmplacementContainer<typename C, typename... Args> @\textit{see below}@
+ concept HasPushFront<Container C> @\textit{see below}@
+ concept HasPushBack<Container C> @\textit{see below}@
+ concept HasInsert<Container C> @\textit{see below}@
// \ref{container.concepts.member}, member container concepts
auto concept MemberContainer<typename C> @\textit{see below}@
@@ -939,9 +947,12 @@
auto concept MemberQueueLikeContainer<typename C> @\textit{see below}@
auto concept MemberInsertionContainer<typename C> @\textit{see below}@
auto concept MemberRangeInsertionContainer<typename C, typename Iter> @\textit{see below}@
- auto concept MemberHasEmplaceBack<typename C, typename... Args> @\textit{see below}@
- auto concept MemberHasEmplaceFront<typename C, typename... Args> @\textit{see below}@
- auto concept MemberHasEmplace<typename C, typename... Args> @\textit{see below}@
+ auto concept MemberFrontEmplacementContainer<typename C, typename... Args> @\textit{see below}@
+ auto concept MemberBackEmplacementContainer<typename C, typename... Args> @\textit{see below}@
+ auto concept MemberEmplacementContainer<typename C, typename... Args> @\textit{see below}@
+ auto concept MemberHasPushFront<MemberContainer C> @\textit{see below}@
+ auto concept MemberHasPushBack<MemberContainer C> @\textit{see below}@
+ auto concept MemberHasInsert<MemberContainer C> @\textit{see below}@
// \mbox{\ref{container.concepts.maps}}, container concept maps
template <MemberContainer C> concept_map Container<C> @\textit{see below}@
@@ -952,12 +963,18 @@
template <MemberInsertionContainer C> concept_map InsertionContainer<C> @\textit{see below}@
template <MemberRangeInsertionContainer C, InputIterator Iter>
concept_map RangeInsertionContainer<C, Iter> @\textit{see below}@
- template <MemberHasEmplaceFront C, typename... Args>
- concept_map HasEmplaceFront<C, Args...> @\textit{see below}@
- template <MemberHasEmplaceBack C, typename... Args>
- concept_map HasEmplaceBack<C, Args...> @\textit{see below}@
- template <MemberHasEmplace C, typename... Args>
- concept_map HasEmplace<C, Args...> @\textit{see below}@
+ template <MemberFrontEmplacementContainer C, typename... Args>
+ concept_map FrontEmplacementContainer<C, Args...> @\textit{see below}@
+ template <MemberBackEmplacementContainer C, typename... Args>
+ concept_map BackEmplacementContainer<C, Args...> @\textit{see below}@
+ template <MemberEmplacementContainer C, typename... Args>
+ concept_map EmplacementContainer<C, Args...> @\textit{see below}@
+ template <MemberHasPushFront C>
+ concept_map HasPushFront<C> @\textit{see below}@
+ template <MemberHasPushBack C>
+ concept_map HasPushBack<C> @\textit{see below}@
+ template <MemberHasInsert C>
+ concept_map HasInsert<C> @\textit{see below}@
template <typename E, size_t N> concept_map Container<E[N]> @\textit{see below}@
template <typename E, size_t N> concept_map Container<const E[N]> @\textit{see below}@
}
@@ -1002,6 +1019,8 @@
const_iterator begin(const C&);
iterator end(C&);
const_iterator end(const C&);
+ const_iterator cbegin(const C& c) { return begin(c); }
+ const_iterator cend(const C& c) { return end(c); }
reference front(C& c) { return *begin(c); }
const_reference front(const C& c) { return *begin(c); }
@@ -1031,7 +1050,7 @@
\begin{itemdecl}
concept FrontInsertionContainer<typename C> : Container<C> {
- void push_front(C&, const value_type&);
+ void push_front(C&, value_type&&);
axiom FrontInsertion(C c, value_type x) {
x == (push_front(c, x), front(c));
@@ -1052,7 +1071,7 @@
reference back(C&);
const_reference back(const C&);
- void push_back(C&, const value_type&);
+ void push_back(C&, value_type&&);
requires BidirectionalIterator<iterator> axiom AccessBack(C c) {
if (begin(c) != end(c)) back(c) == *(--end(c));
@@ -1108,7 +1127,11 @@
\begin{itemdecl}
concept InsertionContainer<typename C> : Container<C> {
- iterator insert(C&, const_iterator, const value_type&);
+ iterator insert(C&, const_iterator, value_type&&);
+
+ axiom Insertion(C c, const_iterator position, value_type v) {
+ v == *insert(c, position, v);
+ }
}
\end{itemdecl}
@@ -1132,36 +1155,97 @@
\end{itemdescr}
\begin{itemdecl}
-concept HasEmplaceFront< C, typename... Args> {
- void emplace_front(C& c, Args... args);
+concept FrontEmplacementContainer<typename C, typename... Args> : Container<C> {
+ void emplace_front(C& c, Args&&... args);
+
+ axiom FrontEmplacement(C c, Args... args) {
+ value_type(args...) == (emplace_front(c, args...), front(c));
+ }
+
+ requires HasPushFront<C> axiom FrontEmplacementPushEquivalence(C c, Args... args) {
+ (emplace_front(c, args...), front(c)) == (push_front(c, value_type(args...)), front(c));
+ }
+}
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\reallynote} describes a container that can be
+ modified by constructing elements at the front of the sequence.}
+\end{itemdescr}
+
+\begin{itemdecl}
+concept BackEmplacementContainer<typename C, typename... Args> : Container<C> {
+ void emplace_back(C& c, Args&&... args);
+
+ axiom BackEmplacement(C c, Args... args) {
+ value_type(args...) == (emplace_back(c, args...), back(c));
+ }
+
+ requires HasPushBack<C> axiom BackEmplacementPushEquivalence(C c, Args... args) {
+ (emplace_back(c, args...), back(c)) == (push_back(c, value_type(args...)), back(c));
+ }
+}
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\reallynote} describes a container that can be
+ modified by constructing elements at the back of the sequence.}
+\end{itemdescr}
+
+\begin{itemdecl}
+concept EmplacementContainer<typename C, typename... Args> : Container<C> {
+ iterator emplace(C& c, const_iterator position, Args&&... args);
+
+ axiom Emplacement(C c, const_iterator position, Args... args) {
+ value_type(args...) == *emplace(c, position, args...);
+ }
+
+ requires HasInsert<C> axiom EmplacementPushEquivalence(C c, const_iterator position, Args... args) {
+ *emplace(c, position, args...) == *insert(c, position, value_type(args...));
+ }
+}
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\reallynote} describes a container that can be
+ modified by constructing elements at any position within
+ the sequence.}
+\end{itemdescr}
+
+\begin{itemdecl}
+concept HasPushFront<Container C> {
+ void push_front(C&, value_type&&);
}
\end{itemdecl}
\begin{itemdescr}
\pnum
-\addedConcepts{\mbox{\reallynote} describes types with an emplace_front operation }
+\addedConcepts{\mbox{\reallynote} describes types with a push_front operation }
\end{itemdescr}
\begin{itemdecl}
-concept HasEmplaceBack<typename C, typename... Args> {
- void emplace_back(C& c, Args... args);
+concept HasPushBack<Container C> {
+ void push_back(C&, value_type&&);
}
\end{itemdecl}
\begin{itemdescr}
\pnum
-\addedConcepts{\mbox{\reallynote} describes types with an emplace_back operation }
+\addedConcepts{\mbox{\reallynote} describes types with a push_back operation }
\end{itemdescr}
\begin{itemdecl}
-concept HasEmplace<typename C, typename... Args> {
- void emplace(C& c, const_iterator position, Args... args);
+concept HasInsert<Container C> {
+ iterator insert(C&, const_iterator, value_type&&);
}
\end{itemdecl}
\begin{itemdescr}
\pnum
-\addedConcepts{\mbox{\reallynote} describes types with an emplace operation }
+\addedConcepts{\mbox{\reallynote} describes types with an insert operation }
\end{itemdescr}
\rSec3[container.concepts.member]{Member container concepts}
@@ -1187,7 +1271,7 @@
requires Convertible<reference, const_reference>
&& Convertible<reference, const value_type&>
- && Convertible<const_reference, const _value_type&>;
+ && Convertible<const_reference, const value_type&>;
&& Convertible<iterator, const_iterator>
&& SameType<ForwardIterator<iterator>::value_type, value_type>
&& SameType<ForwardIterator<const_iterator>::value_type, value_type>
@@ -1205,8 +1289,10 @@
const_iterator C::begin() const;
iterator C::end();
const_iterator C::end() const;
- reference C::front() { return *this->begin(); }
- const_reference C::front() const { return *this->begin(); }
+ const_iterator C::cbegin() const { return this->begin(); }
+ const_iterator C::cend() const { return this->end(); }
+ reference C::front() { return *this->begin(); }
+ const_reference C::front() const { return *this->begin(); }
axiom MemberAccessFront(C c) {
if (c.begin() != c.end()) c.front() == *c.begin();
@@ -1232,7 +1318,7 @@
\begin{itemdecl}
auto concept MemberFrontInsertionContainer<typename C> : MemberContainer<C> {
- void C::push_front(const value_type&);
+ void C::push_front(value_type&&);
axiom MemberFrontInsertion(C c, value_type x) {
x == (c.push_front(x), c.front());
@@ -1253,7 +1339,7 @@
reference C::back();
const_reference C::back() const;
- void C::push_back(const value_type&);
+ void C::push_back(value_type&&);
requires BidirectionalIterator<iterator> axiom MemberAccessBack(C c) {
if (c.begin() != c.end()) c.back() == *(--c.end());
@@ -1308,7 +1394,11 @@
\begin{itemdecl}
auto concept MemberInsertionContainer<typename C> : MemberContainer<C> {
- iterator C::insert(const_iterator, const value_type&);
+ iterator C::insert(const_iterator, value_type&&);
+
+ axiom MemberInsertion(C c, const_iterator position, value_type v) {
+ v == *c.insert(position, v);
+ }
}
\end{itemdecl}
@@ -1319,7 +1409,7 @@
\end{itemdescr}
\begin{itemdecl}
-concept MemberRangeInsertionContainer<typename C, typename Iter> : MemberInsertionContainer<C> {
+auto concept MemberRangeInsertionContainer<typename C, typename Iter> : MemberInsertionContainer<C> {
requires InputIterator<Iter>;
void C::insert(const_iterator position, Iter first, Iter last);
}
@@ -1332,39 +1422,100 @@
\end{itemdescr}
\begin{itemdecl}
-auto concept MemberHasEmplaceFront<typename C, typename... Args> {
- void C::emplace_front(Args... args);
+auto concept MemberFrontEmplacementContainer<typename C, typename... Args> : MemberContainer<C> {
+ void C::emplace_front(Args&&... args);
+
+ axiom MemberFrontEmplacement(C c, Args... args) {
+ value_type(args...) == (c.emplace_front(args...), front(c));
+ }
+
+ requires HasPushFront<C> axiom MemberFrontEmplacementPushEquivalence(C c, Args... args) {
+ (c.emplace_front(args...), c.front()) == (c.push_front(value_type(args...)), c.front());
+ }
+}
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\reallynote} describes a container, in terms of member functions, that can be
+ modified by placing a newly-constructed object at the front of the sequence.}
+\end{itemdescr}
+
+\begin{itemdecl}
+auto concept MemberBackEmplacementContainer<typename C, typename... Args> : MemberBackInsertionContainer<C> {
+ void C::emplace_back(Args&&... args);
+
+ axiom MemberBackEmplacement(C c, Args... args) {
+ value_type(args...) == (c.emplace_back(args...), back(c));
+ }
+
+ requires HasPushBack<C> axiom MemberBackEmplacementPushEquivalence(C c, Args... args) {
+ (c.emplace_back(args...), c.back()) == (c.push_back(value_type(args...)), c.back());
+ }
+}
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\reallynote} describes a container, in terms of member functions, that can be
+ modified by constructing elements at the back of the sequence.}
+\end{itemdescr}
+
+\begin{itemdecl}
+auto concept MemberEmplacementContainer<typename C, typename... Args> : MemberInsertionContainer<C> {
+ void C::emplace(const_iterator position, Args&&... args);
+
+ axiom MemberEmplacement(C c, const_iterator position, Args... args) {
+ value_type(args...) == *c.emplace(position, args...);
+ }
+
+ requires HasInsert<C> axiom MemberEmplacementPushEquivalence(C c, const_iterator position, Args... args) {
+ *c.emplace(position, args...) == *c.insert(position, value_type(args...));
+ }
+}
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\reallynote} describes a container, in terms of member functions, that can be
+ modified by constructing elements at any position within
+ the sequence.}
+\end{itemdescr}
+
+\begin{itemdecl}
+auto concept MemberHasPushFront<MemberContainer C> {
+ void C::push_front(value_type&&);
}
\end{itemdecl}
\begin{itemdescr}
\pnum
\addedConcepts{\mbox{\reallynote} describes a type that has a member
- function named emplace_front }
+ function named push_front }
\end{itemdescr}
\begin{itemdecl}
-auto concept MemberHasEmplaceBack<typename C, typename... Args> {
- void C::emplace_back(Args... args);
+auto concept MemberHasPushBack<MemberContainer C> {
+ void C::push_back(value_type&&);
}
\end{itemdecl}
\begin{itemdescr}
\pnum
\addedConcepts{\mbox{\reallynote} describes a type that has a member
- function named emplace_back }
+ function named push_back }
\end{itemdescr}
\begin{itemdecl}
-auto concept MemberHasEmplace<typename C, typename... Args> {
- void C::emplace(const_iterator position, Args... args);
+auto concept MemberHasInsert<MemberContainer C> {
+ void C::insert(const_iterator, value_type&&);
}
\end{itemdecl}
\begin{itemdescr}
\pnum
\addedConcepts{\mbox{\reallynote} describes a type that has a member
- function named emplace }
+ function named insert }
\end{itemdescr}
\rSec3[container.concepts.maps]{Container concept maps}
@@ -1375,7 +1526,8 @@
(\mbox{\ref{container.concepts.member}}), to meet the free function
container concept syntax in (\mbox{\ref{container.concepts.free}}). It
also contains maps adapting built-in arrays to model the appropriate
- container concepts. }
+ container concepts, and maps adapting emplacement container concepts to
+ to model insertion container concepts. }
\begin{itemdecl}
@@ -1411,7 +1563,7 @@
\begin{itemdecl}
template <MemberFrontInsertionContainer C>
concept_map FrontInsertionContainer<C> {
- void push_front(C& c, const Container<C>::value_type &v) { c.push_front(v); }
+ void push_front(C& c, Container<C>::value_type&& v) { c.push_front(v); }
}
\end{itemdecl}
@@ -1431,7 +1583,7 @@
reference back(C& c) { return c.back(); }
const_reference back(const C& c) { return c.back(); }
- void push_back(C& c, const Container<C>::value_type &v) { c.push_back(v); }
+ void push_back(C& c, Container<C>::value_type&& v) { c.push_back(v); }
}
\end{itemdecl}
@@ -1473,7 +1625,7 @@
\begin{itemdecl}
template <MemberInsertionContainer C>
concept_map InsertionContainer<C> {
- Container<C>::iterator insert(C& c, Container<C>::const_iterator i, const Container<C>::value_type &v)
+ Container<C>::iterator insert(C& c, Container<C>::const_iterator i, Container<C>::value_type&& v)
{ return c.insert(i, v); }
}
\end{itemdecl}
@@ -1501,48 +1653,138 @@
\end{itemdescr}
\begin{itemdecl}
-template <MemberHasEmplaceFront C, typename... Args>
- concept_map HasEmplaceFront<C, Args...> {
- void emplace_front(C& c, Args... args)
+template <MemberFrontEmplacementContainer C, typename... Args>
+ concept_map FrontEmplacementContainer<C, Args...> {
+ void emplace_front(C& c, Args&&... args)
{ c.emplace_front(forward<Args>(args)...); }
}
\end{itemdecl}
\begin{itemdescr}
\pnum
-\addedConcepts{\mbox{\reallynote} Adapts an existing type with an
- \mbox{\tcode{emplace_front}} member function to model the}
- \addedConcepts{\mbox{\tcode{HasEmplaceFront}} concept.}
+\addedConcepts{\mbox{\reallynote} Adapts an existing front-emplace container, which uses
+ member function syntax for each of its operations, to the}
+ \addedConcepts{\mbox{\tcode{FrontEmplacementContainer}} concept.}
\end{itemdescr}
\begin{itemdecl}
-template <MemberHasEmplaceBack C, typename... Args>
- concept_map HasEmplaceBack<C, Args...> {
- void emplace_back(C& c, Args... args)
+template <FrontEmplacementContainer C>
+ requires !HasPushFront<C>
+ concept_map FrontInsertionContainer<C> {
+ void push_front(C& c, Container<C>::value_type&& v)
+ { emplace_front(c, forward<Container<C>::value_type>(v)); }
+ }
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\reallynote} Adapts a front-emplacement container that does not have a push_front to the}
+ \addedConcepts{\mbox{\tcode{FrontInsertionContainer}} concept.}
+\end{itemdescr}
+
+\begin{itemdecl}
+template <MemberBackEmplacementContainer C, typename... Args>
+ concept_map BackEmplacementContainer<C, Args...> {
+ void emplace_back(C& c, Args&&... args)
{ c.emplace_back(forward<Args>(args)...); }
}
\end{itemdecl}
\begin{itemdescr}
\pnum
+\addedConcepts{\mbox{\reallynote} Adapts an existing back-emplace container, which uses
+ member function syntax for each of its operations, to the}
+ \addedConcepts{\mbox{\tcode{BackEmplacementContainer}} concept.}
+\end{itemdescr}
+
+\begin{itemdecl}
+template <BackEmplacementContainer C>
+ requires !HasPushBack<C>
+ concept_map BackInsertionContainer<C> {
+ void push_back(C& c, Container<C>::value_type&& v)
+ { emplace_back(c, forward<Container<C>::value_type>(v)); }
+ }
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\reallynote} Adapts a back-emplacement container that does not have a push_back to the}
+ \addedConcepts{\mbox{\tcode{BackInsertionContainer}} concept.}
+\end{itemdescr}
+
+\begin{itemdecl}
+template <MemberEmplacementContainer C, typename... Args>
+ concept_map EmplacementContainer<C, Args...> {
+ Container<C>::iterator emplace(C& c, Container<C>::const_iterator position, Args&&... args)
+ { return c.emplace(position, forward<Args>(args)...); }
+ }
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\reallynote} Adapts an existing emplace container, which uses
+ member function syntax for each of its operations, to the}
+ \\\addedConcepts{\mbox{\tcode{EmplacementContainer}} concept.}
+\end{itemdescr}
+
+\begin{itemdecl}
+template <EmplacementContainer C>
+ requires !HasInsert<C>
+ concept_map InsertionContainer<C> {
+ Container<C>::iterator insert(C& c, Container<C>::const_iterator position, Container<C>::value_type&& v)
+ { return emplace(c, position, forward<Container<C>::value_type>(v)); }
+ }
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\reallynote} Adapts a emplacement container that does not have an insert to the}
+ \addedConcepts{\mbox{\tcode{InsertionContainer}} concept.}
+\end{itemdescr}
+
+\begin{itemdecl}
+template <MemberHasPushFront C>
+ concept_map HasPushFront<C> {
+ void push_front(C& c, Container<C>::value_type&& v)
+ { c.push_front(v); }
+ }
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\reallynote} Adapts an existing type with a
+ \mbox{\tcode{push_front}} member function to model the}
+ \addedConcepts{\mbox{\tcode{HasPushFront}} concept.}
+\end{itemdescr}
+
+\begin{itemdecl}
+template <MemberHasPushBack C>
+ concept_map HasPushBack<C> {
+ void push_back(C& c, Container<C>::value_type&& v)
+ { c.push_back(v); }
+ }
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
\addedConcepts{\mbox{\reallynote} Adapts an existing type with an
- \mbox{\tcode{emplace_back}} member function to model the}
- \addedConcepts{\mbox{\tcode{HasEmplaceBack}} concept.}
+ \mbox{\tcode{push_back}} member function to model the}
+ \addedConcepts{\mbox{\tcode{HasPushBack}} concept.}
\end{itemdescr}
\begin{itemdecl}
-template <MemberHasEmplace C, typename... Args>
- concept_map HasEmplace<C, Args...> {
- void emplace(C& c, Container<C>::const_iterator position, Args... args)
- { c.emplace(position, forward<Args>(args)...); }
+template <MemberHasInsert C>
+ concept_map HasInsert<C> {
+ Container<C>::iterator insert(C& c, Container<C>::const_iterator position, Container<C>::value_type&& v)
+ { return c.insert(position, v); }
}
\end{itemdecl}
\begin{itemdescr}
\pnum
\addedConcepts{\mbox{\reallynote} Adapts an existing type with an
- \mbox{\tcode{emplace}} member function to model the}
- \addedConcepts{\mbox{\tcode{HasEmplace}} concept.}
+ \mbox{\tcode{insert}} member function to model the}
+ \addedConcepts{\mbox{\tcode{HasInsert}} concept.}
\end{itemdescr}
@@ -1642,7 +1884,7 @@
\begin{codeblock}
namespace std {
- template <@\changedConcepts{class}{ValueType}@ T, @\changedConcepts{class}{RandomAccessAllocator}@ Alloc@\removedConcepts{ator}@ = allocator<T> >
+ template <@\changedConcepts{class}{ValueType}@ T, @\changedConcepts{class}{Allocator}@ Alloc@\removedConcepts{ator}@ = allocator<T> >
@\addedConcepts{requires NothrowDestructible<T>}@
class deque;
template <@\changedConcepts{class}{EqualityComparable}@ T, class Alloc@\removedConcepts{ator}@>
@@ -1799,7 +2041,7 @@
\begin{codeblock}
namespace std {
- template <@\changedConcepts{class}{ValueType}@ T, @\changedConcepts{class}{RandomAccessAllocator}@ Alloc@\removedConcepts{ator}@ = allocator<T> >
+ template <@\changedConcepts{class}{ValueType}@ T, @\changedConcepts{class}{Allocator}@ Alloc@\removedConcepts{ator}@ = allocator<T> >
@\addedConcepts{requires MoveConstructible<T>}@
class vector;
template <@\changedConcepts{class}{EqualityComparable}@ T, class Alloc@\removedConcepts{ator}@>
@@ -1821,7 +2063,7 @@
template <@\changedConcepts{class}{ValueType}@ T, class Alloc@\removedConcepts{ator}@>
void swap(vector<T,Alloc@\removedConcepts{ator}@>& x, vector<T,Alloc@\removedConcepts{ator}@>&& y);
- template <@\changedConcepts{class}{RandomAccessAllocator}@ Alloc@\removedConcepts{ator}@> class vector<bool,Alloc@\removedConcepts{ator}@>;
+ template <@\changedConcepts{class}{Allocator}@ Alloc@\removedConcepts{ator}@> class vector<bool,Alloc@\removedConcepts{ator}@>;
\end{codeblock}
\rSec2[array]{\marktr{}Class template \tcode{array}}
@@ -2086,7 +2328,7 @@
\begin{codeblock}
namespace std {
- template <@\changedConcepts{class}{ValueType}@ T, @\changedConcepts{class}{RandomAccessAllocator}@ Alloc@\removedConcepts{ator}@ = allocator<T> >
+ template <@\changedConcepts{class}{ValueType}@ T, @\changedConcepts{class}{Allocator}@ Alloc@\removedConcepts{ator}@ = allocator<T> >
@\addedConcepts{requires NothrowDestructible<T>}@
class deque {
public:
@@ -3903,7 +4145,7 @@
void push(const value_type& x) { @\removedConcepts{c.}@push_back(@\addedConcepts{c, }@x); }
void push(value_type&& x) { @\removedConcepts{c.}@push_back(@\addedConcepts{c, }@move(x)); }
template <class... Args>
- @\addedConcepts{requires HasEmplaceBack<Cont, Args\&\&...>}@
+ @\addedConcepts{requires BackEmplacementContainer<Cont, Args\&\&...>}@
void emplace(Args&&... args)
{ @\removedConcepts{c.}@emplace_back(@\addedConcepts{c, }@forward<Args>(args)...); }
void pop() { @\removedConcepts{c.}@pop_front(@\addedConcepts{c}@); }
@@ -4120,7 +4362,7 @@
void push(const value_type& x);
void push(value_type&& x);
template <class... Args>
- @\addedConcepts{requires HasEmplaceBack<Cont, Args\&\&...>}@
+ @\addedConcepts{requires BackEmplacementContainer<Cont, Args\&\&...>}@
void emplace(Args&&... args);
void pop();
@\addedConcepts{requires Swappable<Cont>}@
@@ -4237,7 +4479,7 @@
\index{emplace@\tcode{emplace}!\tcode{priority_queue}}%
\begin{itemdecl}
template <class... Args>
- @\addedConcepts{requires HasEmplaceBack<Cont, Args\&\&...>}@
+ @\addedConcepts{requires BackEmplacementContainer<Cont, Args\&\&...>}@
void emplace(Args&&... args);
\end{itemdecl}
\begin{itemdescr}
@@ -4341,7 +4583,7 @@
void push(const value_type& x) { @\removedConcepts{c.}@push_back(@\addedConcepts{c, }@x); }
void push(value_type&& x) { @\removedConcepts{c.}@push_back(@\addedConcepts{c, }@move(x)); }
template <class... Args>
- @\addedConcepts{requires HasEmplaceBack<Cont, Args\&\&...>}@
+ @\addedConcepts{requires BackEmplacementContainer<Cont, Args\&\&...>}@
void emplace(Args&&... args)
{ @\removedConcepts{c.}@emplace_back(@\addedConcepts{c, }@forward<Args>(args)...); }
void pop() { @\removedConcepts{c.}@pop_back(@\addedConcepts{c}@); }
@@ -4508,7 +4750,7 @@
\begin{codeblock}
namespace std {
- template <@\changedConcepts{class}{ValueType}@ T, @\changedConcepts{class}{RandomAccessAllocator}@ Alloc@\removedConcepts{ator}@ = allocator<T> >
+ template <@\changedConcepts{class}{ValueType}@ T, @\changedConcepts{class}{Allocator}@ Alloc@\removedConcepts{ator}@ = allocator<T> >
@\addedConcepts{requires MoveConstructible<T>}@
class vector {
public:
@@ -5039,7 +5281,7 @@
\begin{codeblock}
namespace std {
- template <@\changedConcepts{class}{RandomAccessAllocator}@ Alloc@\removedConcepts{ator}@> class vector<bool, Alloc@\removedConcepts{ator}@> {
+ template <@\changedConcepts{class}{Allocator}@ Alloc@\removedConcepts{ator}@> class vector<bool, Alloc@\removedConcepts{ator}@> {
public:
// types:
typedef bool const_reference;
@@ -6738,7 +6980,7 @@
@\changedConcepts{class}{ValueType}@ T,
@\changedConcepts{class}{Callable<auto, const Key\&>}@ Hash = hash<Key>,
@\changedConcepts{class}{Predicate<auto, Key, Key>}@ Pred = equal_to<Key>,
- @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = allocator<pair<const Key, T> > >
+ @\changedConcepts{class}{Allocator}@ Alloc = allocator<pair<const Key, T> > >
@\addedConcepts{requires NothrowDestructible<Key> \&\& NothrowDestructible<T>}@
@\addedConcepts{\&\& SameType<Hash::result_type, size_t>}@
@\addedConcepts{\&\& CopyConstructible<Hash> \&\& CopyConstructible<Pred>}@
@@ -6753,7 +6995,7 @@
@\changedConcepts{class}{ValueType}@ T,
@\changedConcepts{class}{Callable<auto, const Key\&>}@ Hash = hash<Key>,
@\changedConcepts{class}{Predicate<auto, Key, Key>}@ Pred = equal_to<Key>,
- @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = allocator<pair<const Key, T> > >
+ @\changedConcepts{class}{Allocator}@ Alloc = allocator<pair<const Key, T> > >
@\addedConcepts{requires NothrowDestructible<Key> \&\& NothrowDestructible<T>}@
@\addedConcepts{\&\& SameType<Hash::result_type, size_t>}@
@\addedConcepts{\&\& CopyConstructible<Hash> \&\& CopyConstructible<Pred>}@
@@ -6795,7 +7037,7 @@
template <@\changedConcepts{class}{ValueType}@ Value,
@\changedConcepts{class}{Callable<auto, const Value\&>}@ Hash = hash<Value>,
@\changedConcepts{class}{Predicate<auto, Value, Value>}@ class Pred = equal_to<Value>,
- @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = allocator<Value> >
+ @\changedConcepts{class}{Allocator}@ Alloc = allocator<Value> >
@\addedConcepts{requires NothrowDestructible<Value>}@
@\addedConcepts{\&\& SameType<Hash::result_type, size_t>}@
@\addedConcepts{\&\& CopyConstructible<Hash> \&\& CopyConstructible<Pred>}@
@@ -6809,7 +7051,7 @@
template <@\changedConcepts{class}{ValueType}@ Value,
@\changedConcepts{class}{Callable<auto, const Value\&>}@ Hash = hash<Value>,
@\changedConcepts{class}{Predicate<auto, Value, Value>}@ class Pred = equal_to<Value>,
- @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = allocator<Value> >
+ @\changedConcepts{class}{Allocator}@ Alloc = allocator<Value> >
@\addedConcepts{requires NothrowDestructible<Value>}@
@\addedConcepts{\&\& SameType<Hash::result_type, size_t>}@
@\addedConcepts{\&\& CopyConstructible<Hash> \&\& CopyConstructible<Pred>}@
@@ -6868,7 +7110,7 @@
@\changedConcepts{class}{ValueType}@ T,
@\changedConcepts{class}{Callable<auto, const Key\&>}@ Hash = hash<Key>,
@\changedConcepts{class}{Predicate<auto, Key, Key>}@ Pred = equal_to<Key>,
- @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = allocator<pair<const Key, T> > >
+ @\changedConcepts{class}{Allocator}@ Alloc = allocator<pair<const Key, T> > >
@\addedConcepts{requires NothrowDestructible<Key> \&\& NothrowDestructible<T>}@
@\addedConcepts{\&\& SameType<Hash::result_type, size_t>}@
@\addedConcepts{\&\& CopyConstructible<Hash> \&\& CopyConstructible<Pred>}@
@@ -7169,7 +7411,7 @@
@\changedConcepts{class}{ValueType}@ T,
@\changedConcepts{class}{Callable<auto, const Key\&>}@ Hash = hash<Key>,
@\changedConcepts{class}{Predicate<auto, Key, Key>}@ Pred = equal_to<Key>,
- @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = allocator<pair<const Key, T> > >
+ @\changedConcepts{class}{Allocator}@ Alloc = allocator<pair<const Key, T> > >
@\addedConcepts{requires NothrowDestructible<Key> \&\& NothrowDestructible<T>}@
@\addedConcepts{\&\& SameType<Hash::result_type, size_t>}@
@\addedConcepts{\&\& CopyConstructible<Hash> \&\& CopyConstructible<Pred>}@
@@ -7419,7 +7661,7 @@
template <@\changedConcepts{class}{ValueType}@ Value,
@\changedConcepts{class}{Callable<auto, const Value\&>}@ Hash = hash<Value>,
@\changedConcepts{class}{Predicate<auto, Value, Value>}@ class Pred = equal_to<Value>,
- @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = allocator<Value> >
+ @\changedConcepts{class}{Allocator}@ Alloc = allocator<Value> >
@\addedConcepts{requires NothrowDestructible<Value>}@
@\addedConcepts{\&\& SameType<Hash::result_type, size_t>}@
@\addedConcepts{\&\& CopyConstructible<Hash> \&\& CopyConstructible<Pred>}@
@@ -7665,7 +7907,7 @@
template <@\changedConcepts{class}{ValueType}@ Value,
@\changedConcepts{class}{Callable<auto, const Value\&>}@ Hash = hash<Value>,
@\changedConcepts{class}{Predicate<auto, Value, Value>}@ class Pred = equal_to<Value>,
- @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = allocator<Value> >
+ @\changedConcepts{class}{Allocator}@ Alloc = allocator<Value> >
@\addedConcepts{requires NothrowDestructible<Value>}@
@\addedConcepts{\&\& SameType<Hash::result_type, size_t>}@
@\addedConcepts{\&\& CopyConstructible<Hash> \&\& CopyConstructible<Pred>}@
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