$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: dgregor_at_[hidden]
Date: 2008-05-18 16:13:26
Author: dgregor
Date: 2008-05-18 16:13:25 EDT (Sun, 18 May 2008)
New Revision: 45498
URL: http://svn.boost.org/trac/boost/changeset/45498
Log:
Conceptualize stack
Text files modified: 
   sandbox/committee/concepts/stdlib/clib-containers.tex |    90 ++++++++++++++++++++++----------------- 
   1 files changed, 51 insertions(+), 39 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-05-18 16:13:25 EDT (Sun, 18 May 2008)
@@ -1294,24 +1294,26 @@
 
 \begin{codeblock}
 namespace std {
-  template <class T, class Cont@\removedConcepts{ainer}@ = deque<T> > class stack;
-  template <class T, class Cont@\removedConcepts{ainer}@>
+  template <@\changedConcepts{class}{ObjectType}@ T, @\changedConcepts{class}{BackInsertionSequence}@ Cont@\removedConcepts{ainer}@ = deque<T> > 
+    @\addedConcepts{requires SameType<Cont::value_type, T>}@
+    class stack;
+  template <@\changedConcepts{class}{EqualityComparable}@ T, class Cont@\removedConcepts{ainer}@>
     bool operator==(const stack<T, Cont@\removedConcepts{ainer}@>& x,const stack<T, Cont@\removedConcepts{ainer}@>& y);
-  template <class T, class Cont@\removedConcepts{ainer}@>
+  template <@\changedConcepts{class}{LessThanComparable}@ T, class Cont@\removedConcepts{ainer}@>
     bool operator< (const stack<T, Cont@\removedConcepts{ainer}@>& x,const stack<T, Cont@\removedConcepts{ainer}@>& y);
-  template <class T, class Cont@\removedConcepts{ainer}@>
+  template <@\changedConcepts{class}{EqualityComparable}@ T, class Cont@\removedConcepts{ainer}@>
     bool operator!=(const stack<T, Cont@\removedConcepts{ainer}@>& x,const stack<T, Cont@\removedConcepts{ainer}@>& y);
-  template <class T, class Cont@\removedConcepts{ainer}@>
+  template <@\changedConcepts{class}{LessThanComparable}@ T, class Cont@\removedConcepts{ainer}@>
     bool operator> (const stack<T, Cont@\removedConcepts{ainer}@>& x,const stack<T, Cont@\removedConcepts{ainer}@>& y);
-  template <class T, class Cont@\removedConcepts{ainer}@>
+  template <@\changedConcepts{class}{LessThanComparable}@ T, class Cont@\removedConcepts{ainer}@>
     bool operator>=(const stack<T, Cont@\removedConcepts{ainer}@>& x,const stack<T, Cont@\removedConcepts{ainer}@>& y);
-  template <class T, class Cont@\removedConcepts{ainer}@>
+  template <@\changedConcepts{class}{LessThanComparable}@ T, class Cont@\removedConcepts{ainer}@>
     bool operator<=(const stack<T, Cont@\removedConcepts{ainer}@>& x,const stack<T, Cont@\removedConcepts{ainer}@>& y);
-  template <class T, class Allocator>
+  template <@\changedConcepts{class}{ObjectType}@ T, class Allocator>
     void swap(stack<T,Allocator>& x, stack<T,Allocator>& y);
-  template <class T, class Allocator>
+  template <@\changedConcepts{class}{ObjectType}@ T, class Allocator>
     void swap(stack<T,Allocator>&& x, stack<T,Allocator>& y);
-  template <class T, class Allocator>
+  template <@\changedConcepts{class}{ObjectType}@ T, class Allocator>
     void swap(stack<T,Allocator>& x, stack<T,Allocator>&& y);
 }
 \end{codeblock}
@@ -3790,11 +3792,12 @@
 
 \pnum
 \index{stack@\tcode{stack}}%
-Any sequence container supporting operations
-\tcode{back()},
-\tcode{push_back()}\
+Any sequence container \changedConcepts{supporting operations
+\mbox{\tcode{back()}},
+\mbox{\tcode{push_back()}}
 and
-\tcode{pop_back()}\
+\mbox{\tcode{pop_back()}}}{that meets the requirements of the 
+\mbox{\tcode{BackInsertionSequence}} concept}
 can be used to instantiate
 \tcode{stack}.
 In particular,
@@ -3811,7 +3814,8 @@
 
 \begin{codeblock}
 namespace std {
-  template <class T, class Cont@\removedConcepts{ainer}@ = deque<T> >
+  template <@\changedConcepts{class}{ObjectType}@ T, @\changedConcepts{class}{BackInsertionSequence}@ Cont@\removedConcepts{ainer}@ = deque<T> >
+  @\addedConcepts{requires SameType<Cont::value_type, T>}@
   class stack {
   public:
     typedef typename Cont@\removedConcepts{ainer}@::value_type            value_type;
@@ -3823,12 +3827,20 @@
     Cont@\removedConcepts{ainer}@ c;
 
   public:
-    explicit stack(const Cont@\removedConcepts{ainer}@&);
-    explicit stack(Cont@\removedConcepts{ainer}@&& = Cont@\removedConcepts{ainer}@());
-    template <class Alloc> explicit stack(const Alloc&);
-    template <class Alloc> stack(const Cont@\removedConcepts{ainer}@&, const Alloc&);
-    template <class Alloc> stack(Cont@\removedConcepts{ainer}@&&, const Alloc&);
-    template <class Alloc> stack(stack&&, const Alloc&);
+    @\addedConcepts{requires CopyConstructible<Cont>}@ explicit stack(const Cont@\removedConcepts{ainer}@&);
+    @\addedConcepts{requires MoveConstructible<Cont>}@ explicit stack(Cont@\removedConcepts{ainer}@&& = Cont@\removedConcepts{ainer}@());
+    template <class Alloc> 
+      @\addedConcepts{HasConstructor<Cont, Alloc>}@
+      explicit stack(const Alloc&);
+    template <class Alloc> 
+      @\addedConcepts{HasConstructor<Cont, Cont, Alloc>}@
+      stack(const Cont@\removedConcepts{ainer}@&, const Alloc&);
+    template <class Alloc> 
+      @\addedConcepts{HasConstructor<Cont, Cont\&\&, Alloc>}@
+      stack(Cont@\removedConcepts{ainer}@&&, const Alloc&);
+    template <class Alloc> 
+      @\addedConcepts{HasConstructor<Cont, Cont\&\&, Alloc>}@
+      stack(stack&&, const Alloc&);
 
     bool      empty() const             { return c.empty(); }
     size_type size()  const             { return c.size(); }
@@ -3840,23 +3852,23 @@
     void swap(stack&& s)                { c.swap(s.c); }
   };
 
-  template <class T, class Cont@\removedConcepts{ainer}@>
+  template <@\changedConcepts{class}{EqualityComparable}@ T, class Cont@\removedConcepts{ainer}@>
     bool operator==(const stack<T, Cont@\removedConcepts{ainer}@>& x, const stack<T, Cont@\removedConcepts{ainer}@>& y);
-  template <class T, class Cont@\removedConcepts{ainer}@>
+  template <@\changedConcepts{class}{LessThanComparable}@ T, class Cont@\removedConcepts{ainer}@>
     bool operator< (const stack<T, Cont@\removedConcepts{ainer}@>& x, const stack<T, Cont@\removedConcepts{ainer}@>& y);
-  template <class T, class Cont@\removedConcepts{ainer}@>
+  template <@\changedConcepts{class}{EqualityComparable}@ T, class Cont@\removedConcepts{ainer}@>
     bool operator!=(const stack<T, Cont@\removedConcepts{ainer}@>& x, const stack<T, Cont@\removedConcepts{ainer}@>& y);
-  template <class T, class Cont@\removedConcepts{ainer}@>
+  template <@\changedConcepts{class}{LessThanComparable}@ T, class Cont@\removedConcepts{ainer}@>
     bool operator> (const stack<T, Cont@\removedConcepts{ainer}@>& x, const stack<T, Cont@\removedConcepts{ainer}@>& y);
-  template <class T, class Cont@\removedConcepts{ainer}@>
+  template <@\changedConcepts{class}{LessThanComparable}@ T, class Cont@\removedConcepts{ainer}@>
     bool operator>=(const stack<T, Cont@\removedConcepts{ainer}@>& x, const stack<T, Cont@\removedConcepts{ainer}@>& y);
-  template <class T, class Cont@\removedConcepts{ainer}@>
+  template <@\changedConcepts{class}{LessThanComparable}@ T, class Cont@\removedConcepts{ainer}@>
     bool operator<=(const stack<T, Cont@\removedConcepts{ainer}@>& x, const stack<T, Cont@\removedConcepts{ainer}@>& y);
-  template <class T, class Allocator>
+  template <@\changedConcepts{class}{ObjectType}@ T, class Allocator>
     void swap(stack<T,Allocator>& x, stack<T,Allocator>& y);
-  template <class T, class Allocator>
+  template <@\changedConcepts{class}{ObjectType}@ T, class Allocator>
     void swap(stack<T,Allocator>&& x, stack<T,Allocator>& y);
-  template <class T, class Allocator>
+  template <@\changedConcepts{class}{ObjectType}@ T, class Allocator>
     void swap(stack<T,Allocator>& x, stack<T,Allocator>&& y);
 
   template <class T, class Cont@\removedConcepts{ainer}@, class Alloc>
@@ -3873,7 +3885,7 @@
 
 \index{operator==@\tcode{operator==}!stack@\tcode{stack}}%
 \begin{itemdecl}
-template <class T, class Cont@\removedConcepts{ainer}@>
+template <@\changedConcepts{class}{EqualityComparable}@ T, class Cont@\removedConcepts{ainer}@>
     bool operator==(const stack<T, Cont@\removedConcepts{ainer}@>& x,
                     const stack<T, Cont@\removedConcepts{ainer}@>& y);
 \end{itemdecl}
@@ -3886,7 +3898,7 @@
 
 \index{operator"!=@\tcode{operator"!=}!stack@\tcode{stack}}%
 \begin{itemdecl}
-template <class T, class Cont@\removedConcepts{ainer}@>
+template <@\changedConcepts{class}{EqualityComparable}@ T, class Cont@\removedConcepts{ainer}@>
     bool operator!=(const stack<T, Cont@\removedConcepts{ainer}@>& x,
                     const stack<T, Cont@\removedConcepts{ainer}@>& y);
 \end{itemdecl}
@@ -3899,7 +3911,7 @@
 
 \index{operator<@\tcode{operator<}!stack@\tcode{stack}}%
 \begin{itemdecl}
-template <class T, class Cont@\removedConcepts{ainer}@>
+template <@\changedConcepts{class}{LessThanComparable}@ T, class Cont@\removedConcepts{ainer}@>
     bool operator< (const stack<T, Cont@\removedConcepts{ainer}@>& x,
                     const stack<T, Cont@\removedConcepts{ainer}@>& y);
 \end{itemdecl}
@@ -3912,7 +3924,7 @@
 
 \index{operator<=@\tcode{operator<=}!stack@\tcode{stack}}%
 \begin{itemdecl}
-template <class T, class Cont@\removedConcepts{ainer}@>
+template <@\changedConcepts{class}{LessThanComparable}@ T, class Cont@\removedConcepts{ainer}@>
     bool operator<=(const stack<T, Cont@\removedConcepts{ainer}@>& x,
                     const stack<T, Cont@\removedConcepts{ainer}@>& y);
 \end{itemdecl}
@@ -3925,7 +3937,7 @@
 
 \index{operator>@\tcode{operator>}!stack@\tcode{stack}}%
 \begin{itemdecl}
-template <class T, class Cont@\removedConcepts{ainer}@>
+template <@\changedConcepts{class}{LessThanComparable}@ T, class Cont@\removedConcepts{ainer}@>
     bool operator> (const stack<T, Cont@\removedConcepts{ainer}@>& x,
                     const stack<T, Cont@\removedConcepts{ainer}@>& y);
 \end{itemdecl}
@@ -3938,7 +3950,7 @@
 
 \index{operator>=@\tcode{operator>=}!stack@\tcode{stack}}%
 \begin{itemdecl}
-template <class T, class Cont@\removedConcepts{ainer}@>
+template <@\changedConcepts{class}{LessThanComparable}@ T, class Cont@\removedConcepts{ainer}@>
     bool operator>=(const stack<T, Cont@\removedConcepts{ainer}@>& x,
                     const stack<T, Cont@\removedConcepts{ainer}@>& y);
 \end{itemdecl}
@@ -3952,11 +3964,11 @@
 \rSec4[stack.special]{\tcode{stack} specialized algorithms}
 
 \begin{itemdecl}
-template <class T, class Cont@\removedConcepts{ainer}@>
+template <@\changedConcepts{class}{ObjectType}@ T, class Cont@\removedConcepts{ainer}@>
   void swap(stack<T, Cont@\removedConcepts{ainer}@>& x, stack<T, Cont@\removedConcepts{ainer}@>& y);
-template <class T, class Cont@\removedConcepts{ainer}@>
+template <@\changedConcepts{class}{ObjectType}@ T, class Cont@\removedConcepts{ainer}@>
   void swap(stack<T, Cont@\removedConcepts{ainer}@>&& x, stack<T, Cont@\removedConcepts{ainer}@>& y);
-template <class T, class Cont@\removedConcepts{ainer}@>
+template <@\changedConcepts{class}{ObjectType}@ T, class Cont@\removedConcepts{ainer}@>
   void swap(stack<T, Cont@\removedConcepts{ainer}@>& x, stack<T, Cont@\removedConcepts{ainer}@>&& y);
 \end{itemdecl}