Boost logo

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