|
Boost-Commit : |
From: mmarcus_at_[hidden]
Date: 2008-06-30 03:53:32
Author: mmarcus
Date: 2008-06-30 03:53:32 EDT (Mon, 30 Jun 2008)
New Revision: 46888
URL: http://svn.boost.org/trac/boost/changeset/46888
Log:
Fixed dozens of bugs in containers where containers had been
inadvertently repalced by allocators in adaptors.
Text files modified:
sandbox/committee/concepts/stdlib/clib-containers.tex | 165 ++++++++++++++++++++++-----------------
1 files changed, 91 insertions(+), 74 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-06-30 03:53:32 EDT (Mon, 30 Jun 2008)
@@ -797,8 +797,8 @@
requires SameType<ForwardIterator<iterator>::value_type, value_type>
&& SameType<ForwardIterator<const_iterator>::value_type, value_type>;
- bool @\changedCCC{C::empty() const;}{empty(const C\&)}@
- @\removedCCC{size_type C::size() const;}@
+ bool @\changedCCC{C::empty() const;}{empty(const C\& c) \{ return begin(c) == end(c)); \}}@
+ size_type @\changedCCC{C::size() const;}{size(const C\& c) \{ return std::distance(begin(c), end(c)); \}}@
iterator @\changedCCC{C::begin();}{begin(C\&);}@
const_iterator @\changedCCC{C::begin() const;}{begin(const C\&);}@
@@ -807,9 +807,9 @@
@\removedCCC{void C::swap(C\&\&)}@
- axiom Container@\changedCCC{Size}{Empty}@(C c) {
+ axiom ContainerSize(C c) {
@\changedCCC{(C.begin() == C.end()) == C.empty();}{(begin(c) == end(c)) == empty(c);}@
- @\removedCCC{(C.begin() != C.end()) == (C.size() > 0);}@
+ @\changedCCC{(C.begin() != C.end()) == (C.size() > 0);}{(begin(c) != end(c)) == size(c);}@
}
}
@@ -841,15 +841,17 @@
requires SameType<ForwardIterator<iterator>::value_type, value_type>
&& SameType<ForwardIterator<const_iterator>::value_type, value_type>;
- bool C::empty() const;
+ bool C::empty() const { return this->begin() == this->end(); }
+ size_type C::size() const { return std::distance(this->begin(), this->end()); }
iterator C::begin();
const_iterator C::begin() const;
iterator C::end();
const_iterator C::end() const;
- axiom MemberContainerEmpty(C c) {
+ axiom MemberContainerSize(C c) {
(c.begin() == c.end()) == c.empty();
+ (c.begin() != c.end()) == (c.size() > 0);
}
}
\end{itemdecl}
@@ -878,6 +880,7 @@
typedef C::const_iterator const_iterator;
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(); }
@@ -893,15 +896,34 @@
typedef E& reference;
typedef const E& const_reference;
typedef size_t size_type;
-
typedef E* iterator;
typedef const E* const_iterator;
bool empty(const E(&c)[N]) { return N==0; }
+ size_type size(const E(&c) [N]) { return N; }
iterator begin(E(&c)[N]) { return &c[0]; }
const_iterator begin(const E(&c)[N]) { return &c[0]; }
- iterator end(E(&c)[N]) { return &c[N]; }
+ iterator end(E(&c)[N]) { return &c[N]; }
+ const_iterator end(const E(&c)[N]) { return &c[N]; }
+}
+\end{itemdecl}
+
+\begin{itemdecl}
+template <typename E, size_t N>
+concept_map Container<const E[N]> {
+ typedef E value_type;
+ typedef const E& reference;
+ typedef const E& const_reference;
+ typedef size_t size_type;
+
+ typedef const E* iterator;
+ typedef const E* const_iterator;
+
+ bool empty(const E(&c)[N]) { return N==0; }
+ size_type size(const E(&c) c) { return N; }
+
+ const_iterator begin(const E(&c)[N]) { return &c[0]; }
const_iterator end(const E(&c)[N]) { return &c[N]; }
}
\end{itemdecl}
@@ -972,6 +994,14 @@
\end{itemdecl}
\begin{itemdecl}
+template <typename E, size_t N>
+concept_map SequenceContainer<const E[N]> {
+ Container<const E[N]>::const_reference front(const E(&c)[N]) { return c[0]; }
+ Container<const E[N]>::const_reference back(const E(&c)[N]) { return c[N-1]; }
+}
+\end{itemdecl}
+
+\begin{itemdecl}
concept FrontInsertionSequence<typename C> : SequenceContainer<C> {
void @\removedCCC{C::}@push_front(@\addedCC{C\&, }@const value_type&);
void @\removedCCC{C::}@pop_front(@\addedCC{C\&}@);
@@ -1236,7 +1266,7 @@
namespace std {
template <@\changedConcepts{class}{ObjectType}@ T, class Cont@\removedConcepts{ainer}@ = deque<T> >
@\addedConcepts{requires FrontInsertionSequence<Cont> \&\& BackInsertionSequence<Cont>}@
- @\addedConcepts{ \&\& SameType<T, Cont::value_type>}\addedCC{Swappable<Cont>}@
+ @\addedConcepts{ \&\& SameType<T, Cont::value_type>}@
class queue;
template <class T, @\changedConcepts{class}{EqualityComparable}@ Cont@\removedConcepts{ainer}@>
bool operator==(const queue<T, Cont@\removedConcepts{ainer}@>& x,const queue<T, Cont@\removedConcepts{ainer}@>& y);
@@ -1250,25 +1280,24 @@
bool operator>=(const queue<T, Cont@\removedConcepts{ainer}@>& x,const queue<T, Cont@\removedConcepts{ainer}@>& y);
template <class T, @\changedConcepts{class}{LessThanComparable}@ Cont@\removedConcepts{ainer}@>
bool operator<=(const queue<T, Cont@\removedConcepts{ainer}@>& x,const queue<T, Cont@\removedConcepts{ainer}@>& y);
- template <@\changedConcepts{class}{ObjectType}@ T, class Alloc@\removedConcepts{ator}@>
- void swap(queue<T,Alloc@\removedConcepts{ator}@>& x, queue<T,Alloc@\removedConcepts{ator}@>& y);
- template <@\changedConcepts{class}{ObjectType}@ T, class Alloc@\removedConcepts{ator}@>
- void swap(queue<T,Alloc@\removedConcepts{ator}@>&& x, queue<T,Alloc@\removedConcepts{ator}@>& y);
- template <@\changedConcepts{class}{ObjectType}@ T, class Alloc@\removedConcepts{ator}@>
- void swap(queue<T,Alloc@\removedConcepts{ator}@>& x, queue<T,Alloc@\removedConcepts{ator}@>&& y);
+ template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class Allocator}{Swappable Cont}@>
+ void swap(queue<T,@\changedCCC{Allocator}{ Cont}@>& x, queue<T,@\changedCCC{Allocator}{ Cont}@>& y);
+ template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class Allocator}{Swappable Cont}@>
+ void swap(queue<T,@\changedCCC{Allocator}{ Cont}@>&& x, queue<T,@\changedCCC{Allocator}{ Cont}@>& y);
+ template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class Allocator}{Swappable Cont}@>
+ void swap(queue<T,@\changedCCC{Allocator}{ Cont}@>& x, queue<T,@\changedCCC{Allocator}{ Cont}@>&& y);
template <@\changedConcepts{class}{ObjectType}@ T, @\changedConcepts{class}{BackInsertionSequence}@ Cont@\removedConcepts{ainer}@ = vector<T>,
@\changedConcepts{class}{Predicate<auto, T, T>}@ Compare = less<typename Cont@\removedConcepts{ainer}@::value_type> >
@\addedConcepts{requires SameType<Cont::value_type, T> \&\&} \removedCCC{Mutable}\addedConcepts{RandomAccessIterator<Cont::iterator>}@
@\addedConcepts{\&\& }\changedCCC{Swappable}{Shuffle}\addedConcepts{Iterator<Cont::iterator> \&\& CopyConstructible<Compare>}@
- @\addedCC{Swappable<Cont>}@
class priority_queue;
- template <@\changedConcepts{class}{ObjectType}@ T, class Alloc@\removedConcepts{ator}@@\addedConcepts{, Swappable Compare}@>
- void swap(priority_queue<T,Alloc@\removedConcepts{ator}@>& x, priority_queue<T,Alloc@\removedConcepts{ator}@>& y);
- template <@\changedConcepts{class}{ObjectType}@ T, class Alloc@\removedConcepts{ator}@@\addedConcepts{, Swappable Compare}@>
- void swap(priority_queue<T,Alloc@\removedConcepts{ator}@>&& x, priority_queue<T,Alloc@\removedConcepts{ator}@>& y);
- template <@\changedConcepts{class}{ObjectType}@ T, class Alloc@\removedConcepts{ator}@@\addedConcepts{, Swappable Compare}@>
- void swap(priority_queue<T,Alloc@\removedConcepts{ator}@>& x, priority_queue<T,Alloc@\removedConcepts{ator}@>&& y);
+ template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class Allocator}{Swappable Cont}@@\addedConcepts{, Swappable Compare}@>
+ void swap(priority_queue<T,@\changedCCC{Allocator}{ Cont, Compare}@>& x, priority_queue<T,@\changedCCC{Allocator}{ Cont, Compare}@>& y);
+ template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class Allocator}{Swappable Cont}@@\addedConcepts{, Swappable Compare}@>
+ void swap(priority_queue<T,@\changedCCC{Allocator}{ Cont, Compare}@>&& x, priority_queue<T,@\changedCCC{Allocator}{ Cont, Compare}@>& y);
+ template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class Allocator}{Swappable Cont}@@\addedConcepts{, Swappable Compare}@>
+ void swap(priority_queue<T,@\changedCCC{Allocator}{ Cont, Compare}@>& x, priority_queue<T,@\changedCCC{Allocator}{ Cont, Compare}@>&& y);
}
\end{codeblock}
@@ -1278,7 +1307,7 @@
\begin{codeblock}
namespace std {
template <@\changedConcepts{class}{ObjectType}@ T, @\changedConcepts{class}{BackInsertionSequence}@ Cont@\removedConcepts{ainer}@ = deque<T> >
- @\addedConcepts{requires SameType<Cont::value_type, T>}@ @\addedCC{Swappable<Cont>}@
+ @\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);
@@ -1292,12 +1321,12 @@
bool operator>=(const stack<T, Cont@\removedConcepts{ainer}@>& x,const stack<T, Cont@\removedConcepts{ainer}@>& y);
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 <@\changedConcepts{class}{ObjectType}@ T, class Alloc@\removedConcepts{ator}@>
- void swap(stack<T,Alloc@\removedConcepts{ator}@>& x, stack<T,Alloc@\removedConcepts{ator}@>& y);
- template <@\changedConcepts{class}{ObjectType}@ T, class Alloc@\removedConcepts{ator}@>
- void swap(stack<T,Alloc@\removedConcepts{ator}@>&& x, stack<T,Alloc@\removedConcepts{ator}@>& y);
- template <@\changedConcepts{class}{ObjectType}@ T, class Alloc@\removedConcepts{ator}@>
- void swap(stack<T,Alloc@\removedConcepts{ator}@>& x, stack<T,Alloc@\removedConcepts{ator}@>&& y);
+ template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class Allocator}{Swappable Cont}@>
+ void swap(stack<T,@\changedCCC{Allocator}{Cont}@>& x, stack<T, @\changedCCC{Allocator}{Cont}@>& y);
+ template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class Allocator}{Swappable Cont}@>
+ void swap(stack<T, @\changedCCC{Allocator}{Cont}@>&& x, stack<T, @\changedCCC{Allocator}{Cont}@>& y);
+ template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class Allocator}{Swappable Cont}@>
+ void swap(stack<T, @\changedCCC{Allocator}{Cont}@>& x, stack<T, @\changedCCC{Allocator}{Cont}@>&& y);
}
\end{codeblock}
@@ -3297,25 +3326,9 @@
\begin{codeblock}
namespace std {
-
- @\addedCC{concept HasSize<typename T> \{}@
- @\addedCC{typename size_type;}@
- @ \addedCC{size_type size(const T\&);}@
- @\addedCC{\}}@
- @\addedCC{}@
- @\addedCC{auto concept HasMemberSize<typename T> \{}@
- @\addedCC{typename size_type = T::size_type;}@
- @\addedCC{size_type T::size() const;}@
- @\addedCC{\} }@
- @\addedCC{}@
- @\addedCC{template <HasMemberSize C>}@
- @\addedCC{concept_map HasSize<C> \{}@
- @\addedCC{C::size_type size(const C\& c) \{ return c.size(); \} }@
- @\addedCC{\}}@
-
template <@\changedConcepts{class}{ObjectType}@ T, class Cont@\removedConcepts{ainer}@ = deque<T> >
- @\addedConcepts{requires FrontInsertionSequence<Cont> \&\& BackInsertionSequence<Cont>}@
- @\addedConcepts{ \&\& SameType<T, Cont::value_type>}@@\addedCC{ \&\& HasSize<Cont> \&\& Swappable<Cont>}@
+ @\addedConcepts{requires FrontInsertionSequence<Cont> \&\& BackInsertionSequence<Cont>
+ \&\& SameType<T, Cont::value_type>}@
class queue {
public:
typedef typename Cont@\removedConcepts{ainer}@::value_type value_type;
@@ -3354,7 +3367,9 @@
void push(const value_type& x) { @\removedCCC{c.}@push_back(@\addedCC{c, }@x); }
void push(value_type&& x) { @\removedCCC{c.}@push_back(@\addedCC{c, }@std::move(x)); }
void pop() { @\removedCCC{c.}@pop_front(@\addedCC{c}@); }
- void swap(queue&& q) { @\removedCCC{c.}@swap(@\addedCC{c}@, q.c); }
+
+ @\addedCC{requires Swappable<Cont>}@
+ void swap(queue&& q) { @\removedCCC{c.}@swap(@\addedCC{c}@, q.c); }
};
template <class T, @\changedConcepts{class}{EqualityComparable}@ Cont@\removedConcepts{ainer}@>
@@ -3370,11 +3385,11 @@
template <class T, @\changedConcepts{class}{LessThanComparable}@ Cont@\removedConcepts{ainer}@>
bool operator<=(const queue<T, Cont@\removedConcepts{ainer}@>& x, const queue<T, Cont@\removedConcepts{ainer}@>& y);
- template <@\changedConcepts{class}{ObjectType}@ T, class Cont@\removedConcepts{ainer}@>
+ template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class}{Swappable}@ Cont@\removedConcepts{ainer}@>
void swap(queue<T, Cont@\removedConcepts{ainer}@>& x, queue<T, Cont@\removedConcepts{ainer}@>& y);
- template <@\changedConcepts{class}{ObjectType}@ T, class Cont@\removedConcepts{ainer}@>
+ template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class}{Swappable}@ Cont@\removedConcepts{ainer}@>
void swap(queue<T, Cont@\removedConcepts{ainer}@>&& x, queue<T, Cont@\removedConcepts{ainer}@>& y);
- template <@\changedConcepts{class}{ObjectType}@ T, class Cont@\removedConcepts{ainer}@>
+ template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class}{Swappable}@ Cont@\removedConcepts{ainer}@>
void swap(queue<T, Cont@\removedConcepts{ainer}@>& x, queue<T, Cont@\removedConcepts{ainer}@>&& y);
@\addedConcepts{template <class T, class Cont, class Alloc>}@
@@ -3474,17 +3489,17 @@
\rSec4[queue.special]{\tcode{queue} specialized algorithms}
\begin{itemdecl}
-template <@\changedConcepts{class}{ObjectType}@ T, class Cont@\removedConcepts{ainer}@>
+template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class}{Swappable}@ Cont@\removedConcepts{ainer}@>
void swap(queue<T, Cont@\removedConcepts{ainer}@>& x, queue<T, Cont@\removedConcepts{ainer}@>& y);
-template <@\changedConcepts{class}{ObjectType}@ T, class Cont@\removedConcepts{ainer}@>
+template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class}{Swappable}@ Cont@\removedConcepts{ainer}@>
void swap(queue<T, Cont@\removedConcepts{ainer}@>&& x, queue<T, Cont@\removedConcepts{ainer}@>& y);
-template <@\changedConcepts{class}{ObjectType}@ T, class Cont@\removedConcepts{ainer}@>
+template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class}{Swappable}@ Cont@\removedConcepts{ainer}@>
void swap(queue<T, Cont@\removedConcepts{ainer}@>& x, queue<T, Cont@\removedConcepts{ainer}@>&& y);
\end{itemdecl}
\begin{itemdescr}
\pnum
-\effects \tcode{x.swap(y)}.
+\effects \tcode{@\changedCCC{x.swap(y)}{swap(x, y)}@}.
\end{itemdescr}
\rSec3[priority.queue]{Class template \tcode{priority_queue}}
@@ -3517,7 +3532,7 @@
template <@\changedConcepts{class}{ObjectType}@ T, @\changedConcepts{class}{BackInsertionSequence}@ Cont@\removedConcepts{ainer}@ = vector<T>,
@\changedConcepts{class}{Predicate<auto, T, T>}@ Compare = less<typename Cont@\removedConcepts{ainer}@::value_type> >
@\addedConcepts{requires SameType<Cont::value_type, T> \&\&} \removedCCC{Mutable}\addedConcepts{RandomAccessIterator<Cont::iterator>}@
- @\addedConcepts{\&\&} \changedCCC{Swappable}{Shuffle}\addedConcepts{Iterator<Cont::iterator> \&\& CopyConstructible<Compare>}@@\addedCC{ \&\& HasSize<Cont> \&\& Swappable<Cont>}@
+ @\addedConcepts{\&\&} \changedCCC{Swappable}{Shuffle}\addedConcepts{Iterator<Cont::iterator> \&\& CopyConstructible<Compare>}@
class priority_queue {
public:
typedef typename Cont@\removedConcepts{ainer}@::value_type value_type;
@@ -3565,14 +3580,15 @@
void push(const value_type& x);
void push(value_type&& x);
void pop();
- void swap(priority_queue&&);
+ @\addedCC{requires Swappable<Cont>}@
+ void swap(priority_queue&&);
};
// no equality is provided
- template <@\changedConcepts{class}{ObjectType}@ T, class Cont@\removedConcepts{ainer}@, @\addedConcepts{Swappable}@ Compare>
+ template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class}{Swappable}@ Cont@\removedConcepts{ainer}@, @\addedConcepts{Swappable}@ Compare>
void swap(priority_queue<T, Cont@\removedConcepts{ainer}@, Compare>& x, priority_queue<T, Cont@\removedConcepts{ainer}@, Compare>& y);
- template <@\changedConcepts{class}{ObjectType}@ T, class Cont@\removedConcepts{ainer}@, @\addedConcepts{Swappable}@ Compare>
+ template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class}{Swappable}@ Cont@\removedConcepts{ainer}@, @\addedConcepts{Swappable}@ Compare>
void swap(priority_queue<T, Cont@\removedConcepts{ainer}@, Compare>&& x, priority_queue<T, Cont@\removedConcepts{ainer}@, Compare>& y);
- template <@\changedConcepts{class}{ObjectType}@ T, class Cont@\removedConcepts{ainer}@, @\addedConcepts{Swappable}@ Compare>
+ template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class}{Swappable}@ Cont@\removedConcepts{ainer}@, @\addedConcepts{Swappable}@ Compare>
void swap(priority_queue<T, Cont@\removedConcepts{ainer}@, Compare>& x, priority_queue<T, Cont@\removedConcepts{ainer}@, Compare>&& y);
@\addedConcepts{template <class T, class Cont, class Compare, class Alloc>}@
@@ -3693,11 +3709,11 @@
\rSec4[priqueue.special]{\tcode{priority_queue} specialized algorithms}
\begin{itemdecl}
-template <class T, class Cont@\removedConcepts{ainer}@, Compare>
+template <class T, @\changedCCC{class}{Swappable}@ Cont@\removedConcepts{ainer}@, @\addedCC{Swappable}@ Compare>
void swap(priority_queue<T, Cont@\removedConcepts{ainer}@, Compare>& x, priority_queue<T, Cont@\removedConcepts{ainer}@, Compare>& y);
-template <class T, class Cont@\removedConcepts{ainer}@, Compare>
+template <class T, @\changedCCC{class}{Swappable}@ Cont@\removedConcepts{ainer}@, @\addedCC{Swappable}@ Compare>
void swap(priority_queue<T, Cont@\removedConcepts{ainer}@, Compare>&& x, priority_queue<T, Cont@\removedConcepts{ainer}@, Compare>& y);
-template <class T, class Cont@\removedConcepts{ainer}@, Compare>
+template <class T, @\changedCCC{class}{Swappable}@ Cont@\removedConcepts{ainer}@, @\addedCC{Swappable}@ Compare>
void swap(priority_queue<T, Cont@\removedConcepts{ainer}@, Compare>& x, priority_queue<T, Cont@\removedConcepts{ainer}@, Compare>&& y);
\end{itemdecl}
@@ -3733,7 +3749,7 @@
\begin{codeblock}
namespace std {
template <@\changedConcepts{class}{ObjectType}@ T, @\changedConcepts{class}{BackInsertionSequence}@ Cont@\removedConcepts{ainer}@ = deque<T> >
- @\addedConcepts{requires SameType<Cont::value_type, T>}@@\addedCC{ \&\& HasSize<Cont> \&\& Swappable<Cont>}@
+ @\addedConcepts{requires SameType<Cont::value_type, T>}@
class stack {
public:
typedef typename Cont@\removedConcepts{ainer}@::value_type value_type;
@@ -3767,7 +3783,8 @@
void push(const value_type& x) { @\removedCCC{c.}@push_back(@\addedCC{c, }@x); }
void push(value_type&& x) { @\removedCCC{c.}@push_back(@\addedCC{c, }@std::move(x)); }
void pop() { @\removedCCC{c.}@pop_back(@\addedCC{c}@); }
- void swap(stack&& s) { @\removedCCC{c.}@swap(@\addedCC{c, }@s.c); }
+ @\addedCC{requires Swappable<Cont>}@
+ void swap(stack&& s) { @\removedCCC{c.}@swap(@\addedCC{c, }@s.c); }
};
template <@\changedConcepts{class}{EqualityComparable}@ T, class Cont@\removedConcepts{ainer}@>
@@ -3782,12 +3799,12 @@
bool operator>=(const stack<T, Cont@\removedConcepts{ainer}@>& x, const stack<T, Cont@\removedConcepts{ainer}@>& y);
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 <@\changedConcepts{class}{ObjectType}@ T, class Alloc@\removedConcepts{ator}@>
- void swap(stack<T,Alloc@\removedConcepts{ator}@>& x, stack<T,Alloc@\removedConcepts{ator}@>& y);
- template <@\changedConcepts{class}{ObjectType}@ T, class Alloc@\removedConcepts{ator}@>
- void swap(stack<T,Alloc@\removedConcepts{ator}@>&& x, stack<T,Alloc@\removedConcepts{ator}@>& y);
- template <@\changedConcepts{class}{ObjectType}@ T, class Alloc@\removedConcepts{ator}@>
- void swap(stack<T,Alloc@\removedConcepts{ator}@>& x, stack<T,Alloc@\removedConcepts{ator}@>&& y);
+ template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class Allocator}{Swappable Cont}@>
+ void swap(stack<T,@\changedCCC{Allocator}{ Cont}@>& x, stack<T,@\changedCCC{Allocator}{ Cont}@>& y);
+ template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class Allocator}{Swappable Cont}@>
+ void swap(stack<T,@\changedCCC{Allocator}{ Cont}@>&& x, stack<T,@\changedCCC{Allocator}{ Cont}@>& y);
+ template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class Allocator}{Swappable Cont}@>
+ void swap(stack<T,@\changedCCC{Allocator}{ Cont}@>& x, stack<T,@\changedCCC{Allocator}{ Cont}@>&& y);
@\addedConcepts{template <class T, class Cont, class Alloc>}@
@\addedConcepts{requires UsesAllocator<Cont, Alloc>}@
@@ -3886,11 +3903,11 @@
\rSec4[stack.special]{\tcode{stack} specialized algorithms}
\begin{itemdecl}
-template <@\changedConcepts{class}{ObjectType}@ T, class Cont@\removedConcepts{ainer}@>
+template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class}{Swappable}@ Cont@\removedConcepts{ainer}@>
void swap(stack<T, Cont@\removedConcepts{ainer}@>& x, stack<T, Cont@\removedConcepts{ainer}@>& y);
-template <@\changedConcepts{class}{ObjectType}@ T, class Cont@\removedConcepts{ainer}@>
+template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class}{Swappable}@ Cont@\removedConcepts{ainer}@>
void swap(stack<T, Cont@\removedConcepts{ainer}@>&& x, stack<T, Cont@\removedConcepts{ainer}@>& y);
-template <@\changedConcepts{class}{ObjectType}@ T, class Cont@\removedConcepts{ainer}@>
+template <@\changedConcepts{class}{ObjectType}@ T, @\changedCCC{class}{Swappable}@ Cont@\removedConcepts{ainer}@>
void swap(stack<T, Cont@\removedConcepts{ainer}@>& x, stack<T, Cont@\removedConcepts{ainer}@>&& y);
\end{itemdecl}
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