Boost logo

Boost-Commit :

From: dgregor_at_[hidden]
Date: 2008-08-18 23:33:24


Author: dgregor
Date: 2008-08-18 23:33:24 EDT (Mon, 18 Aug 2008)
New Revision: 48208
URL: http://svn.boost.org/trac/boost/changeset/48208

Log:
Lots of updates from N2691
Text files modified:
   sandbox/committee/concepts/stdlib/Makefile | 4
   sandbox/committee/concepts/stdlib/clib-containers.tex | 199 +++++++++++++++++++++++++++++++++------
   2 files changed, 169 insertions(+), 34 deletions(-)

Modified: sandbox/committee/concepts/stdlib/Makefile
==============================================================================
--- sandbox/committee/concepts/stdlib/Makefile (original)
+++ sandbox/committee/concepts/stdlib/Makefile 2008-08-18 23:33:24 EDT (Mon, 18 Aug 2008)
@@ -12,8 +12,6 @@
 .tex.dvi:
         @ if test ! -f $*.ind; then echo "" > $*.ind; fi
         @ $(LATEX) $*
-
-.honk.wibble:
         @ if ( grep 'Writing index file' $*.log > /dev/null ); \
         then makeindex $* ; $(LATEX) $* ; fi
         @ if ( grep 'LaTeX Warning: Label(s) may' $*.log > /dev/null ); \
@@ -43,6 +41,8 @@
 
 .tex.pdf:
         @$(PDFLATEX) $*
+
+.honk.wibble:
         @if ( grep 'LaTeX Warning: Label(s) may' $*.log > /dev/null ); \
         then $(PDFLATEX) $* ; else :; fi
         @ if ( grep 'Writing index file' $*.log > /dev/null ); \

Modified: sandbox/committee/concepts/stdlib/clib-containers.tex
==============================================================================
--- sandbox/committee/concepts/stdlib/clib-containers.tex (original)
+++ sandbox/committee/concepts/stdlib/clib-containers.tex 2008-08-18 23:33:24 EDT (Mon, 18 Aug 2008)
@@ -1307,13 +1307,13 @@
   template <@\changedConcepts{class}{ObjectType}@ T, size_t N>
     struct tuple_size<array<T, N> >;
   template <size_t I, class T, size_t N>
- @\addedConcepts{requires True<(I > 0 \&\& I < N)>}@
+ @\addedConcepts{requires True<(I < N)>}@
     struct tuple_element<I, array<T, N> >;
   template <size_t I, class T, size_t N>
- @\addedConcepts{requires True<(I > 0 \&\& I < N)>}@
+ @\addedConcepts{requires True<(I < N)>}@
     T& get(array<T, N>&);
   template <size_t I, class T, size_t N>
- @\addedConcepts{requires True<(I > 0 \&\& I < N)>}@
+ @\addedConcepts{requires True<(I < N)>}@
     const T& get(const array<T, N>&);
 }
 \end{codeblock}
@@ -1706,7 +1706,7 @@
 \index{get@\tcode{get}!array@\tcode{array}}%
 \begin{itemdecl}
 template <size_t I, class T, size_t N>
- @\addedConcepts{requires True<(I > 0 \&\& I < N)>}@
+ @\addedConcepts{requires True<(I < N)>}@
   T& get(array<T, N>& a);
 \end{itemdecl}
 
@@ -1724,7 +1724,7 @@
 \index{get@\tcode{get}!array@\tcode{array}}%
 \begin{itemdecl}
 template <size_t I, class T, size_t N>
- @\addedConcepts{requires True<(I > 0 \&\& I < N)>}@
+ @\addedConcepts{requires True<(I < N)>}@
   const T& get(const array<T, N>& a);
 \end{itemdecl}
 
@@ -1797,18 +1797,24 @@
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ deque(deque&&);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ deque(const deque&, const Alloc@\removedConcepts{ator}@&);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ deque(deque&&, const Alloc@\removedConcepts{ator}@&);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@
+ deque(initializer_list<T>, const Allocator& = Allocator());
 
    ~deque();
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>} \addedConcepts{\&\& CopyAssignable<T>}@
       deque<T,Alloc@\removedConcepts{ator}@>& operator=(const deque<T,Alloc@\removedConcepts{ator}@>& x);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&> \&\& MoveAssignable<T>}@
       deque<T,Alloc@\removedConcepts{ator}@>& operator=(@\removedConcepts{const}@ deque<T,Alloc@\removedConcepts{ator}@>&& x);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&> \&\& CopyAssignable<T>}@
+ deque& operator=(initializer_list<T>);
     template <@\changedConcepts{class InputIterator}{InputIterator Iter}@>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Iter::reference>}@
             @\addedConcepts{\&\& HasAssign<T, Iter::reference>}@
       void assign(@\changedConcepts{InputIterator}{Iter}@ first, @\changedConcepts{InputIterator}{Iter}@ last);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>} \addedConcepts{\&\& CopyAssignable<T>}@
       void assign(size_type n, const T& t);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>} \addedConcepts{\&\& CopyAssignable<T>}@
+ void assign(initializer_list<T>);
     allocator_type get_allocator() const;
 
     // iterators:
@@ -1848,10 +1854,15 @@
     // \ref{deque.modifiers} modifiers:
     template <class... Args>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Args\&\&...>}@
- void push_front(Args&&... args);
+ void emplace_front(Args&&... args);
     template <class... Args>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Args\&\&...>}@
- void push_back(Args&&... args);
+ void emplace_back(Args&&... args);
+
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ void push_front(const T& x);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ void push_front(T&& x);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ void push_back(const T& x);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ void push_back(T&& x);
 
     template <class... Args>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Args\&\&...> \&\& MoveAssignable<T>}@
@@ -1866,6 +1877,8 @@
     template <@\changedConcepts{class InputIterator}{InputIterator Iter}@>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Iter::reference> \&\& MoveAssignable<T>}@
       void insert(const_iterator position, @\changedConcepts{InputIterator}{Iter}@ first, @\changedConcepts{InputIterator}{Iter}@ last);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&> \&\& MoveAssignable<T>}@
+ void insert(const_iterator position, initializer_list<T>);
 
     void pop_front();
     void pop_back();
@@ -2057,6 +2070,8 @@
 \rSec3[deque.modifiers]{\tcode{deque}\ modifiers}
 
 \index{insert@\tcode{insert}!\tcode{deque}}%
+\index{insert@\tcode{emplace_front}!\tcode{deque}}%
+\index{insert@\tcode{emplace_back}!\tcode{deque}}%
 \index{insert@\tcode{push_front}!\tcode{deque}}%
 \index{insert@\tcode{push_back}!\tcode{deque}}%
 \index{insert@\tcode{emplace}!\tcode{deque}}%
@@ -2074,13 +2089,17 @@
 
 template <class... Args>
   @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Args\&\&...>}@
- void push_front(Args&&... args);
+ void emplace_front(Args&&... args);
 template <class... Args>
   @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Args\&\&...>}@
- void push_back(Args&&... args);
+ void emplace_back(Args&&... args);
 template <class... Args>
   @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Args\&\&...> \&\& MoveAssignable<T>}@
   iterator emplace(const_iterator position, Args&&... args);
+@\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ void push_front(const T& x);
+@\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ void push_front(T&& x);
+@\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ void push_back(const T& x);
+@\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ void push_back(T&& x);
 \end{itemdecl}
 
 \begin{itemdescr}
@@ -2118,9 +2137,10 @@
 \pnum
 \effects\
 An erase in the middle of the deque invalidates all the iterators and
-references to elements of the deque.
-An erase at either end of the
+references to elements of the deque and the past-the-end iterator.
+An erase at the beginning of the
 deque invalidates only the iterators and the references to the erased elements.
+An erase at the end of the deque invalides only the iterators and the references to the erased elements and the past-the-end iterator.
 
 \pnum
 \complexity\
@@ -2193,17 +2213,23 @@
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@
       forward_list(const forward_list<T,Alloc@\removedConcepts{ator}@>& x);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ forward_list(forward_list<T,Alloc@\removedConcepts{ator}@>&& x);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@
+ forward_list(initializer_list<T>, const Allocator& = Allocator());
     ~forward_list();
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ @\addedConcepts{\&\& CopyAssignable<T>}@
       forward_list<T,Alloc@\removedConcepts{ator}@>& operator=(const forward_list<T,Alloc@\removedConcepts{ator}@>& x);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&> \&\& MoveAssignable<T>}@
       forward_list<T,Alloc@\removedConcepts{ator}@>& operator=(forward_list<T,Alloc@\removedConcepts{ator}@>&& x);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&> \&\& CopyAssignable<T>}@
+ forward_list<T,Alloc@\removedConcepts{ator}@> operator=(initializer_list<T>);
     template <@\changedConcepts{class InputIterator}{InputIterator Iter}@>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Iter::reference>}@
             @\addedConcepts{\&\& HasAssign<T, Iter::reference>}@
       void assign(@\changedConcepts{InputIterator}{Iter}@ first, @\changedConcepts{InputIterator}{Iter}@ last);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ @\addedConcepts{\&\& CopyAssignable<T>}@
       void assign(size_type n, const T& t);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ @\addedConcepts{\&\& CopyAssignable<T>}@
+ void assign(initializer_list<T>);
     allocator_type get_allocator() const;
 
     // \ref{forwardlist.iter} iterators:
@@ -2229,7 +2255,9 @@
     // \ref{forwardlist.modifiers} modifiers:
     template <class... Args>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Args\&\&...>}@
- void push_front(Args&&... args);
+ void emplace_front(Args&&... args);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ void push_front(const T& x);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ void push_front(T&& x);
     void pop_front();
    
     template <class... Args>
@@ -2239,6 +2267,8 @@
       iterator insert_after(const_iterator position, const T& x);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@
       iterator insert_after(const_iterator position, T&& x);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@
+ void insert_after(const_iterator position, initializer_list<T> il);
 
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@
       void insert_after(const_iterator position, size_type n, const T& x);
@@ -2377,7 +2407,7 @@
 
 \begin{itemdecl}
 @\addedConcepts{ConstructibleAsElement<Alloc, T, const T\&>} \addedConcepts{\&\& CopyAssignable<T>}@
- void assign(size_type n, const T\& t);
+ void assign(size_type n, const T& t);
 \end{itemdecl}
 
 \begin{itemdescr}
@@ -2419,7 +2449,7 @@
 \begin{itemdecl}
 template <class... Args>
   @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Args\&\&...>}@
- void push_front(Args&&... args);
+ void emplace_front(Args&&... args);
 \end{itemdecl}
 
 \begin{itemdescr}
@@ -2428,6 +2458,16 @@
 \end{itemdescr}
 
 \begin{itemdecl}
+@\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ void push_front(const T& x);
+@\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ void push_front(T&& x);
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\effects Inserts a copy of \tcode{x} at the beginning of the list.
+\end{itemdescr}
+
+\begin{itemdecl}
 void pop_front();
 \end{itemdecl}
 
@@ -2482,6 +2522,16 @@
 \end{itemdescr}
 
 \begin{itemdecl}
+@\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@
+ void insert_after(const_iterator position, initializer_list<T> il);
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\effects \tcode{insert_after(p, s.begin(), s.end())}.
+\end{itemdescr}
+
+\begin{itemdecl}
 template <class... Args>
   @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Args\&\&...>}@
   iterator emplace_after(const_iterator position, Args&&... args);
@@ -2759,17 +2809,23 @@
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ list(list&& x);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ list(const list&, const Alloc@\removedConcepts{ator}@&);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ list(list&&, const Alloc@\removedConcepts{ator}@&);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@
+ list(initializer_list<T>, const Allocator& = Allocator());
    ~list();
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ @\addedConcepts{\&\& CopyAssignable<T>}@
       list<T,Alloc@\removedConcepts{ator}@>& operator=(const list<T,Alloc@\removedConcepts{ator}@>& @\farg{x}@);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&> \&\& MoveAssignable<T>}@
       list<T,Alloc@\removedConcepts{ator}@>& operator=(list<T,Alloc@\removedConcepts{ator}@>&& x);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&> \&\& CopyAssignable<T>}@
+ list<T,Alloc@\removedConcepts{ator}@>& operator=(initializer_list<T>);
     template <@\changedConcepts{class InputIterator}{InputIterator Iter}@>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Iter::reference>}@
             @\addedConcepts{\&\& HasAssign<T, Iter::reference>}@
       void assign(@\changedConcepts{InputIterator}{Iter}@ first, @\changedConcepts{InputIterator}{Iter}@ last);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ @\addedConcepts{\&\& CopyAssignable<T>}@
       void assign(size_type n, const T& t);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&> \&\& CopyAssignable<T>}@
+ void assign(initializer_list<T>);
     allocator_type get_allocator() const;
 
     // iterators:
@@ -2803,13 +2859,18 @@
     // \ref{list.modifiers} modifiers:
     template <class... Args>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Args\&\&...>}@
- void push_front(Args&&... args);
+ void emplace_front(Args&&... args);
     void pop_front();
     template <class... Args>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Args\&\&...>}@
- void push_back(Args&&... args);
+ void emplace_back(Args&&... args);
     void pop_back();
 
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ void push_front(const T& x);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ void push_front(T&& x);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ void push_back(const T& x);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ void push_back(T&& x);
+
     template <class... Args>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Args\&\&...>}@
       iterator emplace(const_iterator position, Args&&... args);
@@ -2823,6 +2884,8 @@
       @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Iter::reference>}@
       void insert(const_iterator @\farg{position}@, @\changedConcepts{InputIterator}{Iter}@ @\farg{first}@,
                   @\changedConcepts{InputIterator}{Iter}@ @\farg{last}@);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@
+ void insert(const_iterator position, initializer_list<T> il);
 
     iterator erase(const_iterator @\farg{position}@);
     iterator erase(const_iterator @\farg{position}@, const_iterator @\farg{last}@);
@@ -3054,13 +3117,17 @@
 
 template <class... Args>
   @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Args\&\&...>}@
- void push_front(Args&&... args);
+ void emplace_front(Args&&... args);
 template <class... Args>
   @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Args\&\&...>}@
- void push_back(Args&&... args);
+ void emplace_back(Args&&... args);
 template <class... Args>
   @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Args\&\&...>}@
   iterator emplace(const_iterator position, Args&&... args);
+@\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ void push_front(const T& x);
+@\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ void push_front(T&& x);
+@\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ void push_back(const T& x);
+@\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ void push_back(T&& x);
 \end{itemdecl}
 
 \begin{itemdescr}
@@ -4130,17 +4197,23 @@
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ vector(vector&&);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ vector(const vector&, const Alloc@\removedConcepts{ator}@&);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ vector(vector&&, const Alloc@\removedConcepts{ator}@&);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@
+ vector(initializer_list<T>, const Allocator& = Allocator());
    ~vector();
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ @\addedConcepts{\&\& CopyAssignable<T>}@
       vector<T,Alloc@\removedConcepts{ator}@>& operator=(const vector<T,Alloc@\removedConcepts{ator}@>& x);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&> \&\& MoveAssignable<T>}@
       vector<T,Alloc@\removedConcepts{ator}@>& operator=(vector<T,Alloc@\removedConcepts{ator}@>&& x);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&> \&\& CopyAssignable<T>}@
+ vector<T,Alloc@\removedConcepts{ator}@>& operator=(initializer_list<T>);
     template <@\changedConcepts{class InputIterator}{InputIterator Iter}@>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Iter::reference>}@
             @\addedConcepts{\&\& HasAssign<T, Iter::reference>}@
       void assign(@\changedConcepts{InputIterator}{Iter}@ first, @\changedConcepts{InputIterator}{Iter}@ last);
- @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ @\addedConcepts{\&\& CopyAssignable<T>}@
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&> \&\& CopyAssignable<T>}@
       void assign(size_type n, const T& u);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&> \&\& CopyAssignable<T>}@
+ void assign(initializer_list<T>);
     allocator_type get_allocator() const;
 
     // iterators:
@@ -4168,6 +4241,7 @@
     size_type capacity() const;
     bool empty() const;
     void reserve(size_type n);
+ void shrink_to_fit();
 
     // element access:
     reference operator[](size_type n);
@@ -4186,7 +4260,9 @@
     // \ref{vector.modifiers} modifiers:
     template <class... Args>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Args\&\&...>}@
- void push_back(Args&&... args);
+ void emplace_back(Args&&... args);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ void push_back(const T& x);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ void push_back(T&& x);
     void pop_back();
 
     template <class... Args>
@@ -4204,6 +4280,8 @@
               @\addedConcepts{\&\& MoveAssignable<T>}@
         void insert(const_iterator position,
                     @\changedConcepts{InputIterator}{Iter}@ first, @\changedConcepts{InputIterator}{Iter}@ last);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&> \&\& MoveAssignable<T>}@
+ void insert(const_iterator position, initializer_list<T> il);
     @\addedConcepts{requires MoveAssignable<T>}@ iterator erase(const_iterator position);
     @\addedConcepts{requires MoveAssignable<T>}@ iterator erase(const_iterator first, const_iterator last);
     void swap(vector<T,Alloc@\removedConcepts{ator}@>&&);
@@ -4426,6 +4504,15 @@
 \tcode{capacity()}.
 \end{itemdescr}
 
+\begin{itemdecl}
+void shrink_to_fit();
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\notes \tcode{shrink_to_fint} is a non-binding request to reduce \tcode{capacity()} to \tcode{size()}. \enternote The request is non-binding to allow latitude for implementation-specific optimizations. \exitnote
+\end{itemdescr}
+
 \index{swap@\tcode{swap}!\tcode{vector}}%
 \begin{itemdecl}
 void swap(vector<T,Alloc@\removedConcepts{ator}@>&& x);
@@ -4526,11 +4613,13 @@
 
 template <class... Args>
   @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Args\&\&...>}@
- void push_back(Args&&... args);
+ void emplace_back(Args&&... args);
 template <class... Args>
   @\addedConcepts{requires ConstructibleAsElement<Alloc, T, Args\&\&...>}@
         @\addedConcepts{\&\& MoveAssignable<T>}@
   iterator emplace(const_iterator position, Args&&... args);
+@\addedConcepts{requires ConstructibleAsElement<Alloc, T, const T\&>}@ void push_back(const T& x);
+@\addedConcepts{requires ConstructibleAsElement<Alloc, T, T\&\&>}@ void push_back(T&& x);
 \end{itemdecl}
 
 \begin{itemdescr}
@@ -4646,13 +4735,16 @@
     vector(vector<bool,Alloc@\removedConcepts{ator}@>&& x);
     vector(const vector&, const Alloc@\removedConcepts{ator}@&);
     vector(vector&&, const Alloc@\removedConcepts{ator}@&);
+ vector(initializer_list<bool>);
    ~vector();
     vector<bool,Alloc@\removedConcepts{ator}@>& operator=(const vector<bool,Alloc@\removedConcepts{ator}@>& x);
     vector<bool,Alloc@\removedConcepts{ator}@>& operator=(vector<bool,Alloc@\removedConcepts{ator}@>&& x);
+ vector<bool,Alloc@\removedConcepts{ator}@>& operator=(initializer_list<bool>);
     template <@\changedConcepts{class InputIterator}{InputIterator Iter}@>
       @\addedConcepts{requires Convertible<Iter::reference, bool>}@
       void assign(@\changedConcepts{InputIterator}{Iter}@ first, @\changedConcepts{InputIterator}{Iter}@ last);
     void assign(size_type n, const bool& t);
+ void assign(initializer_list<bool>);
     allocator_type get_allocator() const;
 
     // iterators:
@@ -4677,6 +4769,7 @@
     size_type capacity() const;
     bool empty() const;
     void reserve(size_type n);
+ void shrink_to_fit();
 
     // element access:
     reference operator[](size_type n);
@@ -4697,6 +4790,7 @@
         @\addedConcepts{requires Convertible<Iter::reference, bool>}@
         void insert(const_iterator position,
                     @\changedConcepts{InputIterator}{Iter}@ first, @\changedConcepts{InputIterator}{Iter}@ last);
+ void insert(const_iterator position, initializer_list<bool> il);
 
     iterator erase(const_iterator position);
     iterator erase(const_iterator first, const_iterator last);
@@ -4943,8 +5037,8 @@
             @\changedConcepts{class}{Predicate<auto, Key, Key>}@ Compare = less<Key>,
             @\changedConcepts{class}{Allocator}@ Alloc@\removedConcepts{ator}@ = allocator<pair<const Key, T> > >
   @\addedConcepts{requires NothrowDestructible<Key> \&\& NothrowDestructible<T> \&\& CopyConstructible<Compare>}@
- @\addedConcepts{\&\& ConstructibleAsElement<Alloc, Compare, const Compare\&>}@
- @\addedConcepts{\&\& ConstructibleAsElement<Alloc, Compare, Compare\&\&>}@
+ @\addedConcepts{\&\& ConstructibleAsElement<Alloc, Compare, const Compare\&>}@
+ @\addedConcepts{\&\& ConstructibleAsElement<Alloc, Compare, Compare\&\&>}@
   class map {
   public:
     // types:
@@ -4992,11 +5086,19 @@
       map(const map&, const Alloc@\removedConcepts{ator}@&);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, value_type\&\&>}@
       map(map&&, const Alloc@\removedConcepts{ator}@&);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
+ map(initializer_list<value_type>,
+ const Compare& = Compare(),
+ const Allocator& = Allocator());
    ~map();
- @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&> \&\& CopyAssignable<value_type>}@
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
+ @\addedConcepts{\&\& CopyAssignable<value_type>}@
       map<Key,T,Compare,Alloc@\removedConcepts{ator}@>& operator=(const map<Key,T,Compare,Alloc@\removedConcepts{ator}@>& x);
     map<Key,T,Compare,Alloc@\removedConcepts{ator}@>&
       operator=(map<Key,T,Compare,Alloc@\removedConcepts{ator}@>&& x);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
+ @\addedConcepts{\&\& CopyAssignable<value_type>}@
+ map<Key,T,Compare,Alloc@\removedConcepts{ator}@>& operator=(initializer_list<value_type>);
     allocator_type get_allocator() const;
 
     // iterators:
@@ -5036,7 +5138,7 @@
       pair<iterator, bool> emplace(Args&&... args);
     template <class... Args>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, Args\&\&...>}@
- iterator emplace(const_iterator position, Args&&... args);
+ iterator emplace_hint(const_iterator position, Args&&... args);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
       pair<iterator, bool> insert(const value_type& x);
     template <class P>
@@ -5048,8 +5150,11 @@
       @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, P\&\&> \&\& MoveConstructible<value_type>}@
       iterator insert(const_iterator position, P&&);
     template <@\changedConcepts{class InputIterator}{InputIterator Iter}@>
- @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, Iter::reference> \&\& MoveConstructible<value_type>}@
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, Iter::reference>}@
+ @\addedConcepts{\&\& MoveConstructible<value_type>}@
       void insert(@\changedConcepts{InputIterator}{Iter}@ first, @\changedConcepts{InputIterator}{Iter}@ last);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
+ void insert(initializer_list<value_type>);
 
     iterator erase(const_iterator position);
     size_type erase(const key_type& x);
@@ -5450,11 +5555,19 @@
       multimap(const multimap&, const Alloc@\removedConcepts{ator}@&);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, value_type\&\&>}@
       multimap(multimap&&, const Alloc@\removedConcepts{ator}@&);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
+ multimap(initializer_list<value_type>,
+ const Compare& = Compare(),
+ const Allocator& = Allocator());
    ~multimap();
- @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&> \&\& CopyAssignable<value_type>}@
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
+ @\addedConcepts{\&\& CopyAssignable<value_type>}@
       multimap<Key,T,Compare,Alloc@\removedConcepts{ator}@>& operator=(const multimap<Key,T,Compare,Alloc@\removedConcepts{ator}@>& x);
     multimap<Key,T,Compare,Alloc@\removedConcepts{ator}@>&
       operator=(const multimap<Key,T,Compare,Alloc@\removedConcepts{ator}@>&& x);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
+ @\addedConcepts{\&\& CopyAssignable<value_type>}@
+ multimap<Key,T,Compare,Alloc@\removedConcepts{ator}@>& operator=(initializer_list<value_type>);
     allocator_type get_allocator() const;
 
     // iterators:
@@ -5484,7 +5597,7 @@
       iterator emplace(Args&&... args);
     template <class... Args>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, Args\&\&...>}@
- iterator emplace(const_iterator position, Args&&... args);
+ iterator emplace_hint(const_iterator position, Args&&... args);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
       iterator insert(const value_type& x);
     template <class P>
@@ -5496,8 +5609,11 @@
       @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, P\&\&> \&\& MoveConstructible<value_type>}@
       iterator insert(const_iterator position, P&& x);
     template <@\changedConcepts{class InputIterator}{InputIterator Iter}@>
- @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, Iter::reference>} \&\& MoveConstructible<value_type>@
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, Iter::reference>}@
+ @\addedConcepts{\&\& MoveConstructible<value_type>}@
       void insert(@\changedConcepts{InputIterator}{Iter}@ first, @\changedConcepts{InputIterator}{Iter}@ last);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
+ void insert(initializer_list<value_type>);
 
     iterator erase(const_iterator position);
     size_type erase(const key_type& x);
@@ -5791,11 +5907,19 @@
       set(const set&, const Alloc@\removedConcepts{ator}@&);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, value_type\&\&>}@
       set(set&&, const Alloc@\removedConcepts{ator}@&);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
+ set(initializer_list<value_type>,
+ const Compare& = Compare(),
+ const Allocator& = Allocator());
    ~set();
 
- @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&> \&\& CopyAssignable<value_type>}@
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
+ @\addedConcepts{\&\& CopyAssignable<value_type>}@
       set<Key,Compare,Alloc@\removedConcepts{ator}@>& operator=(const set<Key,Compare,Alloc@\removedConcepts{ator}@>& x);
     set<Key,Compare,Alloc@\removedConcepts{ator}@>& operator=(set<Key,Compare,Alloc@\removedConcepts{ator}@>&& x);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
+ @\addedConcepts{\&\& CopyAssignable<value_type>}@
+ set<Key,Compare,Alloc@\removedConcepts{ator}@>& operator=(initializer_list<value_type>);
     allocator_type get_allocator() const;
 
     // iterators:
@@ -5825,7 +5949,7 @@
       pair<iterator, bool> emplace(Args&&... args);
     template <class... Args>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, Args\&\&...>}@
- iterator emplace(const_iterator position, Args&&... args);
+ iterator emplace_hint(const_iterator position, Args&&... args);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
       pair<iterator,bool> insert(const value_type& x);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, value_type\&\&>}@
@@ -5837,6 +5961,8 @@
     template <@\changedConcepts{class InputIterator}{InputIterator Iter}@>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, Iter::reference> \&\& MoveConstructible<value_type>}@
       void insert(@\changedConcepts{InputIterator}{Iter}@ first, @\changedConcepts{InputIterator}{Iter}@ last);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
+ void insert(initializer_list<value_type>);
 
     iterator erase(const_iterator position);
     size_type erase(const key_type& x);
@@ -6061,10 +6187,17 @@
       multiset(const multiset&, const Alloc@\removedConcepts{ator}@&);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, value_type\&\&>}@
       multiset(multiset&&, const Alloc@\removedConcepts{ator}@&);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
+ multiset(initializer_list<value_type>,
+ const Compare& = Compare(),
+ const Allocator& = Allocator());
    ~multiset();
     @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&> \&\& CopyAssignable<value_type>}@
       multiset<Key,Compare,Alloc@\removedConcepts{ator}@>& operator=(const multiset<Key,Compare,Alloc@\removedConcepts{ator}@>& x);
     multiset<Key,Compare,Alloc@\removedConcepts{ator}@>& operator=(multiset<Key,Compare,Alloc@\removedConcepts{ator}@>&& x);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
+ @\addedConcepts{\&\& CopyAssignable<value_type>}@
+ multiset<Key,Compare,Alloc@\removedConcepts{ator}@>& operator=(initializer_list<value_type>);
     allocator_type get_allocator() const;
 
     // iterators:
@@ -6106,6 +6239,8 @@
     template <@\changedConcepts{class InputIterator}{InputIterator Iter}@>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, Iter::reference> \&\& MoveConstructible<value_type>}@
       void insert(@\changedConcepts{InputIterator}{Iter}@ first, @\changedConcepts{InputIterator}{Iter}@ last);
+ @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
+ void insert(initializer_list<value_type>);
 
     iterator erase(const_iterator position);
     size_type erase(const key_type& x);
@@ -6435,7 +6570,7 @@
       pair<iterator, bool> emplace(Args&&... args);
     template <class... Args>
       @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, Args\&\&...>}@
- iterator emplace(const_iterator position, Args&&... args);
+ iterator emplace_hint(const_iterator position, Args&&... args);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@
       std::pair<iterator, bool> insert(const value_type& obj);
     @\addedConcepts{requires ConstructibleAsElement<Alloc, value_type, const value_type\&>}@


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