Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r48816 - sandbox/committee/concepts/stdlib
From: dgregor_at_[hidden]
Date: 2008-09-17 11:18:46


Author: dgregor
Date: 2008-09-17 11:18:46 EDT (Wed, 17 Sep 2008)
New Revision: 48816
URL: http://svn.boost.org/trac/boost/changeset/48816

Log:
Mat's refactoring of the container concepts
Text files modified:
   sandbox/committee/concepts/stdlib/clib-containers.tex | 463 +++++++++++++++++++++++----------------
   1 files changed, 272 insertions(+), 191 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-17 11:18:46 EDT (Wed, 17 Sep 2008)
@@ -83,14 +83,13 @@
   (\ref{container.requirements.general}, \ref{sequence.reqmts},
   \ref{associative.reqmts}, \ref{unord.req},
   \ref{vector.cons}). Thanks to Alisdair Meredith for pointing out
- this inconsistency!
+ this inconsistency, and for detailed review work.
 \item Fixed the \tcode{AccessBack} axiom in
   \tcode{BackInsertionContainer} and
   \tcode{MemberBackInsertionContainer}. Added an additional
   requirement to the *\tcode{Insertion} axioms that states that the
   value inserted is the value now stored at the place of
- insertion. Also, added *\tcode{Insertion} axioms to the emplace
- concepts (all thanks to Alisdair Meredith).
+ insertion (thanks to Alisdair Meredith).
 \item Convertibility requirement from \tcode{iterator} to
   \tcode{const_iterator} in the container concepts. Resolves concepts
   issue \#48. Also, added convertibility from the container's
@@ -101,6 +100,24 @@
 \item Use the new \tcode{ValueType} concept, rather than
   \tcode{ObjectType}, to constrain the container's element types, to
   properly exclude abstract classes.
+\item{Moved \tcode{front()} operations and axioms from
+ \tcode{BackInsertionContainer} to \tcode{Container} and provided
+ default implementation in terms of \tcode{begin}. Moved
+ \tcode{pop_back()} and corresponding axioms out of
+ \tcode{BackInsertionContainer} into the (new) refined concept
+ \tcode{StackLikeContainer}. Moved \tcode{pop_front()} and
+ corresponding axioms into the (new) refined concept
+ \tcode{QueueLikeContainer()}. Similar changes were made to the
+ Member versions of these concepts. Update constraints for
+ \tcode{stack}, \tcode{queue}, and \tcode{priority_queue} to make
+ use of these new concepts, avoiding \tcode{queue} overconstraint
+ in the previous version of this document.}
+\item{Replaced \tcode{Emplace} concepts, Member concepts, and concept
+ maps with \tcode{HasEmplaceBack}, \tcode{HasEmplaceFront}, and
+ \tcode{HasEmplace}, etc. Guarded optional \tcode{emplace}
+ operations in \tcode{stack}, \tcode{queue}, and
+ \tcode{priority_queue} with \tcode{HasEmplaceBack}.}
+\item{Removed all qualification by \tcode{std::}}
 \end{itemize}
 
 \end{titlepage}
@@ -906,35 +923,41 @@
   concept Container<typename C> @\textit{see below}@
   concept FrontInsertionContainer<typename C> @\textit{see below}@
   concept BackInsertionContainer<typename C> @\textit{see below}@
+ concept StackLikeContainer<typename C> @\textit{see below}@
+ concept QueueLikeContainer<typename C> @\textit{see below}@
   concept InsertionContainer<typename C> @\textit{see below}@
   concept RangeInsertionContainer<typename C, typename Iter> @\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 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}@
 
   // \ref{container.concepts.member}, member container concepts
   auto concept MemberContainer<typename C> @\textit{see below}@
   auto concept MemberFrontInsertionContainer<typename C> @\textit{see below}@
   auto concept MemberBackInsertionContainer<typename C> @\textit{see below}@
+ auto concept MemberStackLikeContainer<typename C> @\textit{see below}@
+ 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 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 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}@
 
   // \mbox{\ref{container.concepts.maps}}, container concept maps
   template <MemberContainer C> concept_map Container<C> @\textit{see below}@
   template <MemberFrontInsertionContainer C> concept_map FrontInsertionContainer<C> @\textit{see below}@
   template <MemberBackInsertionContainer C> concept_map BackInsertionContainer<C> @\textit{see below}@
+ template <MemberStackLikeContainer C> concept_map StackLikeContainer<C> @\textit{see below}@
+ template <MemberQueueLikeContainer C> concept_map QueueLikeContainer<C> @\textit{see below}@
   template <MemberInsertionContainer C> concept_map InsertionContainer<C> @\textit{see below}@
   template <MemberRangeInsertionContainer C, InputIterator Iter>
     concept_map RangeInsertionContainer<C, Iter> @\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 <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 <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}@
 }
@@ -972,13 +995,19 @@
         && IntegralType<size_type>
         && Convertible<ForwardIterator<iterator>::difference_type, size_type>;
 
- bool empty(const C& c) { return begin(c) == end(c); }
- size_type size(const C& c) { return std::distance(begin(c), end(c)); }
+ bool empty(const C& c) { return begin(c) == end(c); }
+ size_type size(const C& c) { return distance(begin(c), end(c)); }
 
- iterator begin(C&);
- const_iterator begin(const C&);
- iterator end(C&);
- const_iterator end(const C&);
+ iterator begin(C&);
+ const_iterator begin(const C&);
+ iterator end(C&);
+ const_iterator end(const C&);
+ reference front(C& c) { return *begin(c); }
+ const_reference front(const C& c) { return *begin(c); }
+
+ axiom AccessFront(C c) {
+ if (begin(c) != end(c)) front(c) == *begin(c);
+ }
 
   axiom ContainerSize(C c) {
     (begin(c) == end(c)) == empty(c);
@@ -1002,18 +1031,9 @@
 
 \begin{itemdecl}
 concept FrontInsertionContainer<typename C> : Container<C> {
- reference front(C&);
- const_reference front(const C&);
-
   void push_front(C&, const value_type&);
- void pop_front(C&);
-
- axiom AccessFront(C c) {
- if (begin(c) != end(c)) front(c) == *begin(c);
- }
 
   axiom FrontInsertion(C c, value_type x) {
- c == (push_front(c, x), pop_front(c), c);
     x == (push_front(c, x), front(c));
   }
 }
@@ -1023,7 +1043,7 @@
 \begin{itemdescr}
 \pnum
 \addedConcepts{\mbox{\reallynote} describes a container that can be
- modified by adding or removing elements from the front of the
+ modified by adding elements to the front of the
   sequence.}
 \end{itemdescr}
 
@@ -1033,15 +1053,32 @@
   const_reference back(const C&);
 
   void push_back(C&, const value_type&);
- void pop_back(C&);
 
   requires BidirectionalIterator<iterator> axiom AccessBack(C c) {
     if (begin(c) != end(c)) back(c) == *(--end(c));
   }
 
   axiom BackInsertion(C c, value_type x) {
+ x == (push_back(c, x), back(c));
+ }
+}
+\end{itemdecl}
+
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\reallynote} describes a container that can be
+ modified by adding to the back of the
+ sequence.}
+\end{itemdescr}
+
+
+\begin{itemdecl}
+concept StackLikeContainer<typename C> : BackInsertionContainer<C> {
+ void pop_back(C&);
+
+ axiom BackRemoval(C c, value_type x) {
     c == (push_back(c, x), pop_back(c), c);
- x == (push_back(c), back(c));
   }
 }
 \end{itemdecl}
@@ -1056,6 +1093,20 @@
 
 
 \begin{itemdecl}
+concept QueueLikeContainer<typename C> : BackInsertionContainer<C> {
+ void pop_front(C&);
+}
+\end{itemdecl}
+
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\reallynote} describes a container that can be
+ modified by adding elements to the back or removing elements from the front of the
+ sequence.}
+\end{itemdescr}
+
+\begin{itemdecl}
 concept InsertionContainer<typename C> : Container<C> {
   iterator insert(C&, const_iterator, const value_type&);
 }
@@ -1081,48 +1132,36 @@
 \end{itemdescr}
 
 \begin{itemdecl}
-concept FrontEmplacementContainer<typename C, typename... Args> : FrontInsertionContainer<C> {
+concept HasEmplaceFront< C, typename... Args> {
   void emplace_front(C& c, Args... args);
-
- axiom FrontEmplacement(C c, Args... args) {
- c == (emplace_front(c, args...), pop_front(c), c);
- }
 }
 \end{itemdecl}
 
 \begin{itemdescr}
 \pnum
-\addedConcepts{\mbox{\reallynote} describes a container that can be
- modified by placing a newly-constructed object at the front of the sequence.}
+\addedConcepts{\mbox{\reallynote} describes types with an emplace_front operation }
 \end{itemdescr}
 
 \begin{itemdecl}
-concept BackEmplacementContainer<typename C, typename... Args> : BackInsertionContainer<C> {
+concept HasEmplaceBack<typename C, typename... Args> {
   void emplace_back(C& c, Args... args);
-
- axiom BackEmplacement(C c, Args... args) {
- c == (emplace_back(c, args...), pop_back(c), c);
- }
 }
 \end{itemdecl}
 
 \begin{itemdescr}
 \pnum
-\addedConcepts{\mbox{\reallynote} describes a container that can be
- modified by placing a newly-constructed object at the back of the sequence.}
+\addedConcepts{\mbox{\reallynote} describes types with an emplace_back operation }
 \end{itemdescr}
 
 \begin{itemdecl}
-concept EmplacementContainer<typename C, typename... Args> : InsertionContainer<C> {
+concept HasEmplace<typename C, typename... Args> {
   void emplace(C& c, const_iterator position, Args... args);
 }
 \end{itemdecl}
 
 \begin{itemdescr}
 \pnum
-\addedConcepts{\mbox{\reallynote} describes a container that can be
- modified by placing a newly-constructed object at any position within
- the sequence.}
+\addedConcepts{\mbox{\reallynote} describes types with an emplace operation }
 \end{itemdescr}
 
 \rSec3[container.concepts.member]{Member container concepts}
@@ -1159,13 +1198,19 @@
         && IntegralType<size_type>
         && Convertible<ForwardIterator<iterator>::difference_type, size_type>;
 
- bool C::empty() const { return this->begin() == this->end(); }
- size_type C::size() const { return std::distance(this->begin(), this->end()); }
+ bool C::empty() const { return this->begin() == this->end(); }
+ size_type C::size() const { return distance(this->begin(), this->end()); }
 
- iterator C::begin();
- const_iterator C::begin() const;
- iterator C::end();
- const_iterator C::end() const;
+ iterator C::begin();
+ 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(); }
+
+ axiom MemberAccessFront(C c) {
+ if (c.begin() != c.end()) c.front() == *c.begin();
+ }
 
   axiom MemberContainerSize(C c) {
     (c.begin() == c.end()) == c.empty();
@@ -1187,18 +1232,9 @@
 
 \begin{itemdecl}
 auto concept MemberFrontInsertionContainer<typename C> : MemberContainer<C> {
- reference C::front();
- const_reference C::front() const;
-
   void C::push_front(const value_type&);
- void C::pop_front();
-
- axiom MemberAccessFront(C c) {
- if (c.begin() != c.end()) c.front() == *c.begin();
- }
 
   axiom MemberFrontInsertion(C c, value_type x) {
- c == (c.push_front(x), c.pop_front(), c);
     x == (c.push_front(x), c.front());
   }
 }
@@ -1208,7 +1244,7 @@
 \pnum
 \addedConcepts{\mbox{\reallynote} describes a container, in terms of
   member functions, that can be
- modified by adding or removing elements from the front of the
+ modified by adding elements to the front of the
   container.}
 \end{itemdescr}
 
@@ -1218,14 +1254,12 @@
   const_reference C::back() const;
 
   void C::push_back(const value_type&);
- void C::pop_back();
 
   requires BidirectionalIterator<iterator> axiom MemberAccessBack(C c) {
     if (c.begin() != c.end()) c.back() == *(--c.end());
   }
 
   axiom MemberBackInsertion(C c, value_type x) {
- c == (c.push_back(x), c.pop_back(), c);
     x == (c.push_back(x), c.back());
   }
 }
@@ -1235,10 +1269,43 @@
 \begin{itemdescr}
 \pnum
 \addedConcepts{\mbox{\reallynote} describes a container, in terms of member functions, that can be
+ modified by adding elements to the back of the
+ container.}
+\end{itemdescr}
+
+\begin{itemdecl}
+auto concept MemberStackLikeContainer<typename C> : MemberBackInsertionContainer<C> {
+ void C::pop_back();
+
+ axiom MemberBackRemoval(C c, value_type x) {
+ c == (c.push_back(x), c.pop_back(), c);
+ }
+}
+\end{itemdecl}
+
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\reallynote} describes a container, in terms of member functions, that can be
   modified by adding or removing elements from the back of the
   container.}
 \end{itemdescr}
 
+
+\begin{itemdecl}
+auto concept MemberQueueLikeContainer<typename C> : MemberBackInsertionContainer<C> {
+ void C::pop_front();
+}
+\end{itemdecl}
+
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\reallynote} describes a container, in terms of member functions, that can be
+ modified by adding elements to the back or removing elements from the front of the
+ container.}
+\end{itemdescr}
+
 \begin{itemdecl}
 auto concept MemberInsertionContainer<typename C> : MemberContainer<C> {
   iterator C::insert(const_iterator, const value_type&);
@@ -1265,48 +1332,39 @@
 \end{itemdescr}
 
 \begin{itemdecl}
-auto concept MemberFrontEmplacementContainer<typename C, typename... Args> : MemberFrontInsertionContainer<C> {
+auto concept MemberHasEmplaceFront<typename C, typename... Args> {
   void C::emplace_front(Args... args);
-
- axiom MemberFrontEmplacement(C c, Args... args) {
- c == (c.emplace_front(args...), c.pop_front(), c);
- }
 }
 \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.}
+\addedConcepts{\mbox{\reallynote} describes a type that has a member
+ function named emplace_front }
 \end{itemdescr}
 
 \begin{itemdecl}
-auto concept MemberBackEmplacementContainer<typename C, typename... Args> : MemberBackInsertionContainer<C> {
+auto concept MemberHasEmplaceBack<typename C, typename... Args> {
   void C::emplace_back(Args... args);
-
- axiom MemberFrontEmplacement(C c, Args... args) {
- c == (c.emplace_back(args...), c.pop_back(), c);
- }
 }
 \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 back of the sequence.}
+\addedConcepts{\mbox{\reallynote} describes a type that has a member
+ function named emplace_back }
 \end{itemdescr}
 
 \begin{itemdecl}
-auto concept MemberEmplacementContainer<typename C, typename... Args> : MemberInsertionContainer<C> {
+auto concept MemberHasEmplace<typename C, typename... Args> {
   void C::emplace(const_iterator position, Args... args);
 }
 \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 any position within
- the sequence.}
+\addedConcepts{\mbox{\reallynote} describes a type that has a member
+ function named emplace }
 \end{itemdescr}
 
 \rSec3[container.concepts.maps]{Container concept maps}
@@ -1331,13 +1389,15 @@
   typedef C::iterator iterator;
   typedef C::const_iterator const_iterator;
 
- bool empty(const C& c) { return c.empty(); }
- size_type size(const C& c) { return c.size(); }
+ bool empty(const C& c) { return c.empty(); }
+ size_type size(const C& c) { return c.size(); }
 
- iterator begin(C& c) { return c.begin(); }
- const_iterator begin(const C& c) { return c.begin(); }
- iterator end(C& c) { return c.end(); }
- const_iterator end(const C& c) { return c.end(); }
+ iterator begin(C& c) { return c.begin(); }
+ const_iterator begin(const C& c) { return c.begin(); }
+ iterator end(C& c) { return c.end(); }
+ const_iterator end(const C& c) { return c.end(); }
+ reference front(C& c) { return c.front(); }
+ const_reference front(const C& c) { return c.front(); }
 }
 \end{itemdecl}
 
@@ -1351,14 +1411,7 @@
 \begin{itemdecl}
 template <MemberFrontInsertionContainer C>
 concept_map FrontInsertionContainer<C> {
- typedef Container<C>::reference reference;
- typedef Container<C>::const_reference const_reference;
-
- reference front(C& c) { return c.front(); }
- const_reference front(const C& c) { return c.front(); }
-
   void push_front(C& c, const Container<C>::value_type &v) { c.push_front(v); }
- void pop_front(C& c) { c.pop_front(); }
 }
 \end{itemdecl}
 
@@ -1379,7 +1432,6 @@
   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 pop_back(C& c) { c.pop_back(); }
 }
 \end{itemdecl}
 
@@ -1391,6 +1443,34 @@
 \end{itemdescr}
 
 \begin{itemdecl}
+template <MemberStackLikeContainer C>
+concept_map StackLikeContainer<C> {
+ void pop_back(C& c) { c.pop_back(); }
+}
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\reallynote} Adapts an existing container, which uses
+ member function syntax for each of its operations, to the}
+ \\\addedConcepts{\mbox{\tcode{StackLikeContainer}} concept.}
+\end{itemdescr}
+
+\begin{itemdecl}
+template <MemberQueueLikeContainer C>
+concept_map QueueLikeContainer<C> {
+ void pop_front(C& c) { c.pop_front(); }
+}
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\addedConcepts{\mbox{\reallynote} Adapts an existing container, which uses
+ member function syntax for each of its operations, to the}
+ \\\addedConcepts{\mbox{\tcode{QueueLikeContainer}} concept.}
+\end{itemdescr}
+
+\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)
@@ -1421,50 +1501,51 @@
 \end{itemdescr}
 
 \begin{itemdecl}
-template <MemberFrontEmplacementContainer C, typename... Args>
- concept_map FrontEmplacementContainer<C, Args...> {
+template <MemberHasEmplaceFront C, typename... Args>
+ concept_map HasEmplaceFront<C, Args...> {
     void emplace_front(C& c, Args... args)
- { c.emplace_front(std::forward<Args>(args)...); }
+ { c.emplace_front(forward<Args>(args)...); }
   }
 \end{itemdecl}
 
 \begin{itemdescr}
 \pnum
-\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.}
+\addedConcepts{\mbox{\reallynote} Adapts an existing type with an
+ \mbox{\tcode{emplace_front}} member function to model the}
+ \addedConcepts{\mbox{\tcode{HasEmplaceFront}} concept.}
 \end{itemdescr}
 
 \begin{itemdecl}
-template <MemberBackEmplacementContainer C, typename... Args>
- concept_map BackEmplacementContainer<C, Args...> {
+template <MemberHasEmplaceBack C, typename... Args>
+ concept_map HasEmplaceBack<C, Args...> {
     void emplace_back(C& c, Args... args)
- { c.emplace_back(std::forward<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.}
+\addedConcepts{\mbox{\reallynote} Adapts an existing type with an
+ \mbox{\tcode{emplace_back}} member function to model the}
+ \addedConcepts{\mbox{\tcode{HasEmplaceBack}} concept.}
 \end{itemdescr}
 
 \begin{itemdecl}
-template <MemberEmplacementContainer C, typename... Args>
- concept_map EmplacementContainer<C, Args...> {
+template <MemberHasEmplace C, typename... Args>
+ concept_map HasEmplace<C, Args...> {
     void emplace(C& c, Container<C>::const_iterator position, Args... args)
- { c.emplace(position, std::forward<Args>(args)...); }
+ { 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.}
+\addedConcepts{\mbox{\reallynote} Adapts an existing type with an
+ \mbox{\tcode{emplace}} member function to model the}
+ \addedConcepts{\mbox{\tcode{HasEmplace}} concept.}
 \end{itemdescr}
 
+
 \begin{itemdecl}
 template <typename E, size_t N>
 concept_map Container<E[N]> {
@@ -1645,7 +1726,7 @@
 \begin{codeblock}
 namespace std {
   template <@\changedConcepts{class}{ValueType}@ T, class Cont@\removedConcepts{ainer}@ = deque<T> >
- @\addedConcepts{requires FrontInsertionContainer<Cont> \&\& BackInsertionContainer<Cont>}@
+ @\addedConcepts{requires QueueLikeContainer<Cont>}@
           @\addedConcepts{\&\& SameType<T, Cont::value_type>}@
           @\addedConcepts{\&\& NothrowDestructible<Cont>}@
     class queue;
@@ -1668,7 +1749,7 @@
   template <@\changedConcepts{class}{ValueType}@ T, @\changedConcepts{class}{Swappable}@ Cont@\removedConcepts{ainer}@>
     void swap(queue<T,Cont@\removedConcepts{ainer}@>& x, queue<T,Cont@\removedConcepts{ainer}@>&& y);
 
- template <@\changedConcepts{class}{ValueType}@ T, @\changedConcepts{class}{BackInsertionContainer}@ Cont@\removedConcepts{ainer}@ = vector<T>,
+ template <@\changedConcepts{class}{ValueType}@ T, @\changedConcepts{class}{StackLikeContainer}@ Cont@\removedConcepts{ainer}@ = vector<T>,
         @\changedConcepts{{class}}{StrictWeakOrder<auto, T>}@ Compare = less<typename Cont@\removedConcepts{ainer}@::value_type> >
     @\addedConcepts{requires SameType<Cont::value_type, T> \&\& RandomAccessIterator<Cont::iterator>}@
           @\addedConcepts{\&\& ShuffleIterator<Cont::iterator> \&\& CopyConstructible<Compare>}@
@@ -1688,7 +1769,7 @@
 
 \begin{codeblock}
 namespace std {
- template <@\changedConcepts{class}{ValueType}@ T, @\changedConcepts{class}{BackInsertionContainer}@ Cont@\removedConcepts{ainer}@ = deque<T> >
+ template <@\changedConcepts{class}{ValueType}@ T, @\changedConcepts{class}{StackLikeContainer}@ Cont@\removedConcepts{ainer}@ = deque<T> >
     @\addedConcepts{requires SameType<Cont::value_type, T>}@
           @\addedConcepts{\&\& NothrowDestructible<Cont>}@
     class stack;
@@ -1796,8 +1877,8 @@
     typedef size_t size_type;
     typedef ptrdiff_t difference_type;
     typedef T value_type;
- typedef std::reverse_iterator<iterator> reverse_iterator;
- typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator<iterator> reverse_iterator;
+ typedef reverse_iterator<const_iterator> const_reverse_iterator;
 
     T elems[N]; // \expos
 
@@ -2020,8 +2101,8 @@
     typedef Alloc@\removedConcepts{ator}@ allocator_type;
     typedef typename Alloc@\removedConcepts{ator}@::pointer pointer;
     typedef typename Alloc@\removedConcepts{ator}@::const_pointer const_pointer;
- typedef std::reverse_iterator<iterator> reverse_iterator;
- typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator<iterator> reverse_iterator;
+ typedef reverse_iterator<const_iterator> const_reverse_iterator;
 
     // \ref{deque.cons} construct/copy/destroy:
     explicit deque(const Alloc@\removedConcepts{ator}@& = Alloc@\removedConcepts{ator}@());
@@ -2692,7 +2773,7 @@
 
 \begin{itemdescr}
 \pnum
-\effects Inserts an object of type \tcode{value_type} constructed with \tcode{value_type(std::forward<Args>(args)...)} at the beginning of the list.
+\effects Inserts an object of type \tcode{value_type} constructed with \tcode{value_type(forward<Args>(args)...)} at the beginning of the list.
 \end{itemdescr}
 
 \begin{itemdecl}
@@ -2780,7 +2861,7 @@
 \requires \tcode{position} is dereferenceable or equal to \tcode{before_begin()}.
 
 \pnum
-\effects Inserts an object of type \tcode{value_type} constructed with \tcode{value_type(std::forward<Args>(args)...)} after \tcode{position}.
+\effects Inserts an object of type \tcode{value_type} constructed with \tcode{value_type(forward<Args>(args)...)} after \tcode{position}.
 \end{itemdescr}
 
 \begin{itemdecl}
@@ -3032,8 +3113,8 @@
     typedef Alloc@\removedConcepts{ator}@ allocator_type;
     typedef typename Alloc@\removedConcepts{ator}@::pointer pointer;
     typedef typename Alloc@\removedConcepts{ator}@::const_pointer const_pointer;
- typedef std::reverse_iterator<iterator> reverse_iterator;
- typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator<iterator> reverse_iterator;
+ typedef reverse_iterator<const_iterator> const_reverse_iterator;
 
     // \ref{list.cons} construct/copy/destroy:
     explicit list(const Alloc@\removedConcepts{ator}@& = Alloc@\removedConcepts{ator}@());
@@ -3781,7 +3862,7 @@
 \begin{codeblock}
 namespace std {
   template <@\changedConcepts{class}{ValueType}@ T, class Cont@\removedConcepts{ainer}@ = deque<T> >
- @\addedConcepts{requires FrontInsertionContainer<Cont> \&\& BackInsertionContainer<Cont>}@
+ @\addedConcepts{requires QueueLikeContainer<Cont>}@
         @\addedConcepts{\&\& SameType<T, Cont::value_type>}@
         @\addedConcepts{\&\& NothrowDestructible<Cont>}@
   class queue {
@@ -3797,7 +3878,7 @@
   public:
     @\addedConcepts{requires CopyConstructible<Cont>}@ explicit queue(const Cont@\removedConcepts{ainer}@&);
     @\addedConcepts{requires MoveConstructible<Cont>}@ explicit queue(Cont@\removedConcepts{ainer}@&& = Cont@\removedConcepts{ainer}@());
- @\addedConcepts{requires MoveConstructible<Cont>}@ queue(queue&& q) : c(std::move(q.c)) {}
+ @\addedConcepts{requires MoveConstructible<Cont>}@ queue(queue&& q) : c(move(q.c)) {}
     template <class Alloc>
       @\addedConcepts{requires Constructible<Cont, const Alloc\&>}@
       explicit queue(const Alloc&);
@@ -3811,7 +3892,7 @@
       @\addedConcepts{requires Constructible<Cont, Cont\&\&, const Alloc\&>}@
       queue(queue&&, const Alloc&);
     @\addedConcepts{requires MoveAssignable<Cont>}@ queue& operator=(queue&& q)
- { c = std::move(q.c); return *this; }
+ { c = move(q.c); return *this; }
 
     bool empty() const { return @\removedConcepts{c.}@empty(@\addedConcepts{c}@); }
     size_type size() const { return @\removedConcepts{c.}@size(@\addedConcepts{c}@); }
@@ -3820,11 +3901,11 @@
     reference back() { return @\removedConcepts{c.}@back(@\addedConcepts{c}@); }
     const_reference back() const { return @\removedConcepts{c.}@back(@\addedConcepts{c}@); }
     void push(const value_type& x) { @\removedConcepts{c.}@push_back(@\addedConcepts{c, }@x); }
- void push(value_type&& x) { @\removedConcepts{c.}@push_back(@\addedConcepts{c, }@std::move(x)); }
+ void push(value_type&& x) { @\removedConcepts{c.}@push_back(@\addedConcepts{c, }@move(x)); }
     template <class... Args>
- @\addedConcepts{requires BackEmplacementContainer<Cont, Args\&\&...>}@
+ @\addedConcepts{requires HasEmplaceBack<Cont, Args\&\&...>}@
       void emplace(Args&&... args)
- { @\removedConcepts{c.}@emplace_back(@\addedConcepts{c, }@std::forward<Args>(args)...); }
+ { @\removedConcepts{c.}@emplace_back(@\addedConcepts{c, }@forward<Args>(args)...); }
     void pop() { @\removedConcepts{c.}@pop_front(@\addedConcepts{c}@); }
     @\addedConcepts{requires Swappable<Cont>}@
       void swap(queue&& q) { @\removedConcepts{c.}@swap(@\addedConcepts{c, }@q.c); }
@@ -3987,7 +4068,7 @@
 
 \begin{codeblock}
 namespace std {
- template <@\changedConcepts{class}{ValueType}@ T, @\changedConcepts{class}{BackInsertionContainer}@ Cont@\removedConcepts{ainer}@ = vector<T>,
+ template <@\changedConcepts{class}{ValueType}@ T, @\changedConcepts{class}{StackLikeContainer}@ Cont@\removedConcepts{ainer}@ = vector<T>,
             @\changedConcepts{class}{StrictWeakOrder<auto, T>}@ Compare = less<typename Cont@\removedConcepts{ainer}@::value_type> >
   @\addedConcepts{requires SameType<Cont::value_type, T> \&\& RandomAccessIterator<Cont::iterator>}@
         @\addedConcepts{\&\& ShuffleIterator<Cont::iterator> \&\& CopyConstructible<Compare>}@
@@ -4039,7 +4120,7 @@
     void push(const value_type& x);
     void push(value_type&& x);
     template <class... Args>
- @\addedConcepts{requires BackEmplacementContainer<Cont, Args\&\&...>}@
+ @\addedConcepts{requires HasEmplaceBack<Cont, Args\&\&...>}@
       void emplace(Args&&... args);
     void pop();
     @\addedConcepts{requires Swappable<Cont>}@
@@ -4148,7 +4229,7 @@
 \pnum
 \effects
 \begin{codeblock}
-@\removedConcepts{c.}@push_back(@\addedConcepts{c, }@std::move(x));
+@\removedConcepts{c.}@push_back(@\addedConcepts{c, }@move(x));
 push_heap(@\removedConcepts{c.}@begin(@\addedConcepts{c}@), @\removedConcepts{c.}@end(@\addedConcepts{c}@), comp);
 \end{codeblock}
 \end{itemdescr}
@@ -4156,14 +4237,14 @@
 \index{emplace@\tcode{emplace}!\tcode{priority_queue}}%
 \begin{itemdecl}
 template <class... Args>
- @\addedConcepts{requires BackEmplacementContainer<Cont, Args\&\&...>}@
+ @\addedConcepts{requires HasEmplaceBack<Cont, Args\&\&...>}@
   void emplace(Args&&... args);
 \end{itemdecl}
 \begin{itemdescr}
 \pnum
 \effects
 \begin{codeblock}
-@\removedConcepts{c.}@emplace_back(@\addedConcepts{c, }@std::forward<Args>(args)...);
+@\removedConcepts{c.}@emplace_back(@\addedConcepts{c, }@forward<Args>(args)...);
 push_heap(@\removedConcepts{c.}@begin(@\addedConcepts{c}@), @\removedConcepts{c.}@end(@\addedConcepts{c}@), comp);
 \end{codeblock}
 \end{itemdescr}
@@ -4224,7 +4305,7 @@
 
 \begin{codeblock}
 namespace std {
- template <@\changedConcepts{class}{ValueType}@ T, @\changedConcepts{class}{BackInsertionContainer}@ Cont@\removedConcepts{ainer}@ = deque<T> >
+ template <@\changedConcepts{class}{ValueType}@ T, @\changedConcepts{class}{StackLikeContainer}@ Cont@\removedConcepts{ainer}@ = deque<T> >
   @\addedConcepts{requires SameType<Cont::value_type, T>}@
         @\addedConcepts{\&\& NothrowDestructible<Cont>}@
   class stack {
@@ -4258,11 +4339,11 @@
     reference top() { return @\removedConcepts{c.}@back(@\addedConcepts{c}@); }
     const_reference top() const { return @\removedConcepts{c.}@back(@\addedConcepts{c}@); }
     void push(const value_type& x) { @\removedConcepts{c.}@push_back(@\addedConcepts{c, }@x); }
- void push(value_type&& x) { @\removedConcepts{c.}@push_back(@\addedConcepts{c, }@std::move(x)); }
+ void push(value_type&& x) { @\removedConcepts{c.}@push_back(@\addedConcepts{c, }@move(x)); }
     template <class... Args>
- @\addedConcepts{requires BackEmplacementContainer<Cont, Args\&\&...>}@
+ @\addedConcepts{requires HasEmplaceBack<Cont, Args\&\&...>}@
       void emplace(Args&&... args)
- { @\removedConcepts{c.}@emplace_back(@\addedConcepts{c, }@std::forward<Args>(args)...); }
+ { @\removedConcepts{c.}@emplace_back(@\addedConcepts{c, }@forward<Args>(args)...); }
     void pop() { @\removedConcepts{c.}@pop_back(@\addedConcepts{c}@); }
     @\addedConcepts{requires Swappable<Cont>}@
       void swap(stack&& s) { @\removedConcepts{c.}@swap(@\addedConcepts{c, }@s.c); }
@@ -4442,8 +4523,8 @@
     typedef Alloc@\removedConcepts{ator}@ allocator_type;
     typedef typename Alloc@\removedConcepts{ator}@::pointer pointer;
     typedef typename Alloc@\removedConcepts{ator}@::const_pointer const_pointer;
- typedef std::reverse_iterator<iterator> reverse_iterator;
- typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator<iterator> reverse_iterator;
+ typedef reverse_iterator<const_iterator> const_reverse_iterator;
 
     // \ref{vector.cons} construct/copy/destroy:
     explicit vector(const Alloc@\removedConcepts{ator}@& = Alloc@\removedConcepts{ator}@());
@@ -4970,8 +5051,8 @@
     typedef Alloc@\removedConcepts{ator}@ allocator_type;
     typedef @\impdef@ pointer;
     typedef @\impdef@ const_pointer;
- typedef std::reverse_iterator<iterator> reverse_iterator;
- typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator<iterator> reverse_iterator;
+ typedef reverse_iterator<const_iterator> const_reverse_iterator;
 
     // bit reference:
     class reference {
@@ -5317,8 +5398,8 @@
     typedef @\impdef@ difference_type;// See \ref{container.requirements}
     typedef typename Alloc@\removedConcepts{ator}@::pointer pointer;
     typedef typename Alloc@\removedConcepts{ator}@::const_pointer const_pointer;
- typedef std::reverse_iterator<iterator> reverse_iterator;
- typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator<iterator> reverse_iterator;
+ typedef reverse_iterator<const_iterator> const_reverse_iterator;
 
     class value_compare
       : public binary_function<value_type,value_type,bool> {
@@ -5579,7 +5660,7 @@
 \pnum
 \effects
 If there is no key equivalent to \tcode{x} in the map, inserts
-\tcode{value_type(std::move(x), T())}
+\tcode{value_type(move(x), T())}
 into the map.
 
 \pnum
@@ -5786,8 +5867,8 @@
     typedef @\impdef@ difference_type;// See \ref{container.requirements}
     typedef typename Alloc@\removedConcepts{ator}@::pointer pointer;
     typedef typename Alloc@\removedConcepts{ator}@::const_pointer const_pointer;
- typedef std::reverse_iterator<iterator> reverse_iterator;
- typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator<iterator> reverse_iterator;
+ typedef reverse_iterator<const_iterator> const_reverse_iterator;
 
     class value_compare
       : public binary_function<value_type,value_type,bool> {
@@ -6150,8 +6231,8 @@
     typedef @\impdef@ difference_type;// See \ref{container.requirements}
     typedef typename Alloc@\removedConcepts{ator}@::pointer pointer;
     typedef typename Alloc@\removedConcepts{ator}@::const_pointer const_pointer;
- typedef std::reverse_iterator<iterator> reverse_iterator;
- typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator<iterator> reverse_iterator;
+ typedef reverse_iterator<const_iterator> const_reverse_iterator;
 
     // \ref{set.cons} construct/copy/destroy:
     explicit set(const Compare& comp = Compare(),
@@ -6429,8 +6510,8 @@
     typedef @\impdef@ difference_type;// See \ref{container.requirements}
     typedef typename Alloc@\removedConcepts{ator}@::pointer pointer;
     typedef typename Alloc@\removedConcepts{ator}@::const_pointer const_pointer;
- typedef std::reverse_iterator<iterator> reverse_iterator;
- typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ typedef reverse_iterator<iterator> reverse_iterator;
+ typedef reverse_iterator<const_iterator> const_reverse_iterator;
 
     // construct/copy/destroy:
     explicit multiset(const Compare& comp = Compare(),
@@ -6656,8 +6737,8 @@
   template <@\changedConcepts{class}{ValueType}@ Key,
             @\changedConcepts{class}{ValueType}@ T,
             @\changedConcepts{class}{Callable<auto, const Key\&>}@ Hash = hash<Key>,
- @\changedConcepts{class}{Predicate<auto, Key, Key>}@ Pred = std::equal_to<Key>,
- @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = std::allocator<std::pair<const Key, T> > >
+ @\changedConcepts{class}{Predicate<auto, Key, Key>}@ Pred = equal_to<Key>,
+ @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = allocator<pair<const Key, T> > >
     @\addedConcepts{requires NothrowDestructible<Key> \&\& NothrowDestructible<T>}@
           @\addedConcepts{\&\& SameType<Hash::result_type, size_t>}@
           @\addedConcepts{\&\& CopyConstructible<Hash> \&\& CopyConstructible<Pred>}@
@@ -6671,8 +6752,8 @@
   template <@\changedConcepts{class}{ValueType}@ Key,
             @\changedConcepts{class}{ValueType}@ T,
             @\changedConcepts{class}{Callable<auto, const Key\&>}@ Hash = hash<Key>,
- @\changedConcepts{class}{Predicate<auto, Key, Key>}@ Pred = std::equal_to<Key>,
- @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = std::allocator<std::pair<const Key, T> > >
+ @\changedConcepts{class}{Predicate<auto, Key, Key>}@ Pred = equal_to<Key>,
+ @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = allocator<pair<const Key, T> > >
     @\addedConcepts{requires NothrowDestructible<Key> \&\& NothrowDestructible<T>}@
           @\addedConcepts{\&\& SameType<Hash::result_type, size_t>}@
           @\addedConcepts{\&\& CopyConstructible<Hash> \&\& CopyConstructible<Pred>}@
@@ -6713,8 +6794,8 @@
   // \ref{unord.set}, class template unordered_set:
   template <@\changedConcepts{class}{ValueType}@ Value,
             @\changedConcepts{class}{Callable<auto, const Value\&>}@ Hash = hash<Value>,
- @\changedConcepts{class}{Predicate<auto, Value, Value>}@ class Pred = std::equal_to<Value>,
- @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = std::allocator<Value> >
+ @\changedConcepts{class}{Predicate<auto, Value, Value>}@ class Pred = equal_to<Value>,
+ @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = allocator<Value> >
     @\addedConcepts{requires NothrowDestructible<Value>}@
           @\addedConcepts{\&\& SameType<Hash::result_type, size_t>}@
           @\addedConcepts{\&\& CopyConstructible<Hash> \&\& CopyConstructible<Pred>}@
@@ -6727,8 +6808,8 @@
   // \ref{unord.multiset}, class template unordered_multiset:
   template <@\changedConcepts{class}{ValueType}@ Value,
             @\changedConcepts{class}{Callable<auto, const Value\&>}@ Hash = hash<Value>,
- @\changedConcepts{class}{Predicate<auto, Value, Value>}@ class Pred = std::equal_to<Value>,
- @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = std::allocator<Value> >
+ @\changedConcepts{class}{Predicate<auto, Value, Value>}@ class Pred = equal_to<Value>,
+ @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = allocator<Value> >
     @\addedConcepts{requires NothrowDestructible<Value>}@
           @\addedConcepts{\&\& SameType<Hash::result_type, size_t>}@
           @\addedConcepts{\&\& CopyConstructible<Hash> \&\& CopyConstructible<Pred>}@
@@ -6773,7 +6854,7 @@
 \tcode{mapped_type} with the keys.
 
 \pnum
-An \tcode{unordered_map} satisfies all of the requirements of a container, of an unordered associative container, and of an allocator-aware container (Table~\ref{tab:containers.allocatoraware}). It provides the operations described in the preceding requirements table for unique keys; that is, an \tcode{unordered_map} supports the \tcode{a_uniq} operations in that table, not the \tcode{a_eq} operations. For an \tcode{unordered_map<Key, T>} the \tcode{key type} is \tcode{Key}, the mapped type is \tcode{T}, and the value type is \tcode{std::pair<const Key, T>}.
+An \tcode{unordered_map} satisfies all of the requirements of a container, of an unordered associative container, and of an allocator-aware container (Table~\ref{tab:containers.allocatoraware}). It provides the operations described in the preceding requirements table for unique keys; that is, an \tcode{unordered_map} supports the \tcode{a_uniq} operations in that table, not the \tcode{a_eq} operations. For an \tcode{unordered_map<Key, T>} the \tcode{key type} is \tcode{Key}, the mapped type is \tcode{T}, and the value type is \tcode{pair<const Key, T>}.
 
 \pnum
 This section only describes operations on \tcode{unordered_map} that
@@ -6786,8 +6867,8 @@
   template <@\changedConcepts{class}{ValueType}@ Key,
             @\changedConcepts{class}{ValueType}@ T,
             @\changedConcepts{class}{Callable<auto, const Key\&>}@ Hash = hash<Key>,
- @\changedConcepts{class}{Predicate<auto, Key, Key>}@ Pred = std::equal_to<Key>,
- @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = std::allocator<std::pair<const Key, T> > >
+ @\changedConcepts{class}{Predicate<auto, Key, Key>}@ Pred = equal_to<Key>,
+ @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = allocator<pair<const Key, T> > >
   @\addedConcepts{requires NothrowDestructible<Key> \&\& NothrowDestructible<T>}@
         @\addedConcepts{\&\& SameType<Hash::result_type, size_t>}@
         @\addedConcepts{\&\& CopyConstructible<Hash> \&\& CopyConstructible<Pred>}@
@@ -6800,7 +6881,7 @@
   public:
     // types
     typedef Key key_type;
- typedef std::pair<const Key, T> value_type;
+ typedef pair<const Key, T> value_type;
     typedef T mapped_type;
     typedef Hash hasher;
     typedef Pred key_equal;
@@ -6875,7 +6956,7 @@
       @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, Args\&\&...>}@
       iterator emplace_hint(const_iterator position, Args&&... args);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
- @\removedConcepts{std::}@pair<iterator, bool> insert(const value_type& obj);
+ @\removedConcepts{}@pair<iterator, bool> insert(const value_type& obj);
     @\addedConcepts{template <class P>}@
       @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, P\&\&> \&\& MoveConstructible<value_type>}@
       @\addedConcepts{pair<iterator, bool> insert(P\&\& obj);}@
@@ -6905,8 +6986,8 @@
     iterator find(const key_type& k);
     const_iterator find(const key_type& k) const;
     size_type count(const key_type& k) const;
- std::pair<iterator, iterator> equal_range(const key_type& k);
- std::pair<const_iterator, const_iterator> equal_range(const key_type& k) const;
+ pair<iterator, iterator> equal_range(const key_type& k);
+ pair<const_iterator, const_iterator> equal_range(const key_type& k) const;
 
     @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const key_type\&, mapped_type\&\&>}@
           @\addedConcepts{\&\& ConstructibleAsElement<Alloc, mapped_type>}@
@@ -7018,10 +7099,10 @@
 \effects\ If the \tcode{unordered_map} does not already contain
 an element whose key is equivalent to \tcode{\textit{k}}, inserts
 the value
-\tcode{std::pair<const key_type, mapped_type>(k, mapped_type())}
+\tcode{pair<const key_type, mapped_type>(k, mapped_type())}
 \addedConcepts{or
-\mbox{\tcode{std::pair<const key_type,}}}\\
-\addedConcepts{\mbox{\tcode{mapped_type>(std::move(k), mapped_type())}}, respectively}.
+\mbox{\tcode{pair<const key_type,}}}\\
+\addedConcepts{\mbox{\tcode{mapped_type>(move(k), mapped_type())}}, respectively}.
 
 \pnum
 \returns\ A reference to \tcode{x.second}, where \tcode{x}
@@ -7074,7 +7155,7 @@
 another type \tcode{mapped_type} with the keys.
 
 \pnum
-An \tcode{unordered_multimap} satisfies all of the requirements of a container, of an unordered associative container, and of an allocator-aware container (Table~\ref{tab:containers.allocatoraware}). It provides the operations described in the preceding requirements table for equivalent keys; that is, an \tcode{unordered_multimap} supports the \tcode{a_eq} operations in that table, not the \tcode{a_uniq} operations. For an \tcode{unordered_multimap<Key, T>} the \tcode{key type} is \tcode{Key}, the mapped type is \tcode{T}, and the value type is \tcode{std::pair<const Key, T>}.
+An \tcode{unordered_multimap} satisfies all of the requirements of a container, of an unordered associative container, and of an allocator-aware container (Table~\ref{tab:containers.allocatoraware}). It provides the operations described in the preceding requirements table for equivalent keys; that is, an \tcode{unordered_multimap} supports the \tcode{a_eq} operations in that table, not the \tcode{a_uniq} operations. For an \tcode{unordered_multimap<Key, T>} the \tcode{key type} is \tcode{Key}, the mapped type is \tcode{T}, and the value type is \tcode{pair<const Key, T>}.
 
 \pnum
 This section only describes operations on \tcode{unordered_multimap}
@@ -7087,8 +7168,8 @@
   template <@\changedConcepts{class}{ValueType}@ Key,
             @\changedConcepts{class}{ValueType}@ T,
             @\changedConcepts{class}{Callable<auto, const Key\&>}@ Hash = hash<Key>,
- @\changedConcepts{class}{Predicate<auto, Key, Key>}@ Pred = std::equal_to<Key>,
- @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = std::allocator<std::pair<const Key, T> > >
+ @\changedConcepts{class}{Predicate<auto, Key, Key>}@ Pred = equal_to<Key>,
+ @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = allocator<pair<const Key, T> > >
   @\addedConcepts{requires NothrowDestructible<Key> \&\& NothrowDestructible<T>}@
         @\addedConcepts{\&\& SameType<Hash::result_type, size_t>}@
         @\addedConcepts{\&\& CopyConstructible<Hash> \&\& CopyConstructible<Pred>}@
@@ -7101,7 +7182,7 @@
   public:
     // types
     typedef Key key_type;
- typedef std::pair<const Key, T> value_type;
+ typedef pair<const Key, T> value_type;
     typedef T mapped_type;
     typedef Hash hasher;
     typedef Pred key_equal;
@@ -7207,8 +7288,8 @@
     iterator find(const key_type& k);
     const_iterator find(const key_type& k) const;
     size_type count(const key_type& k) const;
- std::pair<iterator, iterator> equal_range(const key_type& k);
- std::pair<const_iterator, const_iterator> equal_range(const key_type& k) const;
+ pair<iterator, iterator> equal_range(const key_type& k);
+ pair<const_iterator, const_iterator> equal_range(const key_type& k) const;
 
     // bucket interface
     size_type bucket_count() const;
@@ -7337,8 +7418,8 @@
 namespace std {
   template <@\changedConcepts{class}{ValueType}@ Value,
             @\changedConcepts{class}{Callable<auto, const Value\&>}@ Hash = hash<Value>,
- @\changedConcepts{class}{Predicate<auto, Value, Value>}@ class Pred = std::equal_to<Value>,
- @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = std::allocator<Value> >
+ @\changedConcepts{class}{Predicate<auto, Value, Value>}@ class Pred = equal_to<Value>,
+ @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = allocator<Value> >
   @\addedConcepts{requires NothrowDestructible<Value>}@
         @\addedConcepts{\&\& SameType<Hash::result_type, size_t>}@
         @\addedConcepts{\&\& CopyConstructible<Hash> \&\& CopyConstructible<Pred>}@
@@ -7425,7 +7506,7 @@
       @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, Args\&\&...>}@
       iterator emplace_hint(const_iterator position, Args&&... args);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
- @\removedConcepts{std::}@pair<iterator, bool> insert(const value_type& obj);
+ @\removedConcepts{}@pair<iterator, bool> insert(const value_type& obj);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, value_type\&\&>}@
       @\addedConcepts{pair<iterator, bool> insert(value_type\&\& obj);}@
     @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
@@ -7454,8 +7535,8 @@
     iterator find(const key_type& k);
     const_iterator find(const key_type& k) const;
     size_type count(const key_type& k) const;
- std::pair<iterator, iterator> equal_range(const key_type& k);
- std::pair<const_iterator, const_iterator> equal_range(const key_type& k) const;
+ pair<iterator, iterator> equal_range(const key_type& k);
+ pair<const_iterator, const_iterator> equal_range(const key_type& k) const;
 
     // bucket interface
     size_type bucket_count() const;
@@ -7583,8 +7664,8 @@
 namespace std {
   template <@\changedConcepts{class}{ValueType}@ Value,
             @\changedConcepts{class}{Callable<auto, const Value\&>}@ Hash = hash<Value>,
- @\changedConcepts{class}{Predicate<auto, Value, Value>}@ class Pred = std::equal_to<Value>,
- @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = std::allocator<Value> >
+ @\changedConcepts{class}{Predicate<auto, Value, Value>}@ class Pred = equal_to<Value>,
+ @\changedConcepts{class}{RandomAccessAllocator}@ Alloc = allocator<Value> >
   @\addedConcepts{requires NothrowDestructible<Value>}@
         @\addedConcepts{\&\& SameType<Hash::result_type, size_t>}@
         @\addedConcepts{\&\& CopyConstructible<Hash> \&\& CopyConstructible<Pred>}@
@@ -7700,8 +7781,8 @@
     iterator find(const key_type& k);
     const_iterator find(const key_type& k) const;
     size_type count(const key_type& k) const;
- std::pair<iterator, iterator> equal_range(const key_type& k);
- std::pair<const_iterator, const_iterator> equal_range(const key_type& k) const;
+ pair<iterator, iterator> equal_range(const key_type& k);
+ pair<const_iterator, const_iterator> equal_range(const key_type& k) const;
 
     // bucket interface
     size_type bucket_count() const;


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