Changeset 48276


Ignore:
Timestamp:
Aug 21, 2008, 2:59:34 AM (10 years ago)
Author:
Douglas Gregor
Message:

Conceptualized move_iterator

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sandbox/committee/concepts/stdlib/clib-iterators.tex

    r48275 r48276  
    219219    @\addedConcepts{concept_map Iterator<insert_iterator<Container> > \{ \}}@
    220220
    221   template <class Iterator> class move_iterator;
    222   template <class Iterator1, class Iterator2>
     221  template <@\changedConcepts{class}{InputIterator}@ Iter@\removedConcepts{ator}@> class move_iterator;
     222  template <@\changedConcepts{class}{InputIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{InputIterator}@ Iter@\removedConcepts{ator}@2>
     223    @\addedConcepts{requires HasEqualTo<Iter1, Iter2>}@
    223224    bool operator==(
    224       const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y);
    225   template <class Iterator1, class Iterator2>
     225      const move_iterator<Iter@\removedConcepts{ator}@1>& x, const move_iterator<Iter@\removedConcepts{ator}@2>& y);
     226  template <@\changedConcepts{class}{InputIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{InputIterator}@ Iter@\removedConcepts{ator}@2>
     227    @\addedConcepts{requires HasEqualTo<Iter1, Iter2>}@
    226228    bool operator!=(
    227       const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y);
    228   template <class Iterator1, class Iterator2>
     229      const move_iterator<Iter@\removedConcepts{ator}@1>& x, const move_iterator<Iter@\removedConcepts{ator}@2>& y);
     230  template <@\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@2>
     231    @\addedConcepts{requires HasLess<Iter1, Iter2>}@
    229232    bool operator<(
    230       const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y);
    231   template <class Iterator1, class Iterator2>
     233      const move_iterator<Iter@\removedConcepts{ator}@1>& x, const move_iterator<Iter@\removedConcepts{ator}@2>& y);
     234  template <@\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@2>
     235    @\addedConcepts{requires HasLess<Iter2, Iter1>}@
    232236    bool operator<=(
    233       const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y);
    234   template <class Iterator1, class Iterator2>
     237      const move_iterator<Iter@\removedConcepts{ator}@1>& x, const move_iterator<Iter@\removedConcepts{ator}@2>& y);
     238  template <@\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@2>
     239    @\addedConcepts{requires HasLess<Iter2, Iter1>}@
    235240    bool operator>(
    236       const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y);
    237   template <class Iterator1, class Iterator2>
     241      const move_iterator<Iter@\removedConcepts{ator}@1>& x, const move_iterator<Iter@\removedConcepts{ator}@2>& y);
     242  template <@\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@2>
     243    @\addedConcepts{requires HasLess<Iter1, Iter2>}@
    238244    bool operator>=(
    239       const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y);
    240   template <class Iterator1, class Iterator2>
    241     typename move_iterator<Iterator>::difference_type operator-(
    242       const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y);
    243   template <class Iterator>
     245      const move_iterator<Iter@\removedConcepts{ator}@1>& x, const move_iterator<Iter@\removedConcepts{ator}@2>& y);
     246
     247  template <@\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@2>
     248    @\addedConcepts{requires HasMinus<Iter1, Iter2>}@
     249    auto operator-(
     250      const move_iterator<Iter@\removedConcepts{ator}@1>& x,
     251      const move_iterator<Iter@\removedConcepts{ator}@2>& y) -> decltype(x.base() - y.base());
     252  template <@\changedConcepts{class}{RandomAccessIterator}@ Iterator>
    244253    move_iterator<Iterator> operator+(
    245       typename move_iterator<Iterator>::difference_type n, const move_iterator<Iterator>& x);
    246   template <class Iterator>
    247     move_iterator<Iterator> make_move_iterator(const Iterator& i);
     254      @\changedConcepts{typename move_iterator<Iterator>}{Iter}@::difference_type n, const move_iterator<Iterator>& x);
     255  template <@\changedConcepts{class}{InputIterator}@ Iter@\removedConcepts{ator}@>
     256    move_iterator<Iter@\removedConcepts{ator}@> make_move_iterator(const Iterator& i);
     257  @\addedConcepts{template<InputIterator Iter>}@
     258    @\addedConcepts{concept_map InputIterator<move_iterator<Iter> > \{ \}}@
     259  @\addedConcepts{template<ForwardIterator Iter>}@
     260    @\addedConcepts{concept_map ForwardIterator<move_iterator<Iter> > \{ \}}@
     261  @\addedConcepts{template<BidirectionalIterator Iter>}@
     262    @\addedConcepts{concept_map BidirectionalIterator<move_iterator<Iter> > \{ \}}@
     263  @\addedConcepts{template<RandomAccessIterator Iter>}@
     264    @\addedConcepts{concept_map RandomAccessIterator<move_iterator<Iter> > \{ \}}@
    248265
    249266  // \ref{stream.iterators}, stream iterators:
     
    493510\rSec3[reverse.iter.requirements]{\tcode{reverse_iterator}\ requirements}
    494511
     512\editorial{Remove [reverse.iter.requirements]}
     513
    495514\pnum
    496515\removedConcepts{The template parameter
     
    14571476\begin{codeblock}
    14581477namespace std {
    1459   template <class Iterator>
     1478  template <@\changedConcepts{class}{InputIterator}@ Iter@\removedConcepts{ator}@>
    14601479  class move_iterator {
    14611480  public:
    14621481    typedef Iterator                                              iterator_type;
    1463     typedef typename iterator_traits<Iterator>::difference_type   difference_type;
     1482    typedef @\changedConcepts{typename iterator_traits<Iterator>}{Iter}@::difference_type   difference_type;
    14641483    typedef Iterator                                              pointer;
    1465     typedef typename iterator_traits<Iterator>::value_type        value_type;
    1466     typedef typename iterator_traits<Iterator>::iterator_category iterator_category;
     1484    typedef @\changedConcepts{typename iterator_traits<Iterator>}{Iter}@::value_type        value_type;
     1485    @\removedConcepts{typedef typename iterator_traits<Iterator>::iterator_category iterator_category;}@
    14671486    typedef value_type&&                                          reference;
    14681487
    14691488    move_iterator();
    1470     explicit move_iterator(Iterator i);
    1471     template <class U> move_iterator(const move_iterator<U>& u);
    1472     template <class U> move_iterator& operator=(const move_iterator<U>& u);
     1489    explicit move_iterator(Iter@\removedConcepts{ator}@ i);
     1490    template <class U>
     1491      @\addedConcepts{requires HasConstructor<Iter, const U\&>}@
     1492      move_iterator(const move_iterator<U>& u);
     1493    template <class U>
     1494      @\addedConcepts{requires HasAssign<Iter, const U\&>}@
     1495      move_iterator& operator=(const move_iterator<U>& u);
    14731496
    14741497    iterator_type base() const;
     
    14781501    move_iterator& operator++();
    14791502    move_iterator operator++(int);
    1480     move_iterator& operator--();
    1481     move_iterator operator--(int);
    1482 
    1483     move_iterator operator+(difference_type n) const;
    1484     move_iterator& operator+=(difference_type n);
    1485     move_iterator operator-(difference_type n) const;
    1486     move_iterator& operator-=(difference_type n);
    1487     reference operator[](difference_type n) const;
     1503    @\addedConcepts{requires BidirectionalIterator<Iter>}@ move_iterator& operator--();
     1504    @\addedConcepts{requires BidirectionalIterator<Iter>}@ move_iterator operator--(int);
     1505
     1506    @\addedConcepts{requires RandomAccessIterator<Iter>}@ move_iterator operator+(difference_type n) const;
     1507    @\addedConcepts{requires RandomAccessIterator<Iter>}@ move_iterator& operator+=(difference_type n);
     1508    @\addedConcepts{requires RandomAccessIterator<Iter>}@ move_iterator operator-(difference_type n) const;
     1509    @\addedConcepts{requires RandomAccessIterator<Iter>}@ move_iterator& operator-=(difference_type n);
     1510    @\addedConcepts{requires RandomAccessIterator<Iter>}@
     1511      @\unspec@ operator[](difference_type n) const;
    14881512
    14891513  private:
    1490     Iterator current;   // \expos
     1514    Iter@\removedConcepts{ator}@ current;   // \expos
    14911515  };
    14921516
    1493   template <class Iterator1, class Iterator2>
     1517  template <@\changedConcepts{class}{InputIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{InputIterator}@ Iter@\removedConcepts{ator}@2>
     1518    @\addedConcepts{requires HasEqualTo<Iter1, Iter2>}@
    14941519    bool operator==(
    1495       const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y);
    1496   template <class Iterator1, class Iterator2>
     1520      const move_iterator<Iter@\removedConcepts{ator}@1>& x, const move_iterator<Iter@\removedConcepts{ator}@2>& y);
     1521  template <@\changedConcepts{class}{InputIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{InputIterator}@ Iter@\removedConcepts{ator}@2>
     1522    @\addedConcepts{requires HasEqualTo<Iter1, Iter2>}@
    14971523    bool operator!=(
    1498       const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y);
    1499   template <class Iterator1, class Iterator2>
     1524      const move_iterator<Iter@\removedConcepts{ator}@1>& x, const move_iterator<Iter@\removedConcepts{ator}@2>& y);
     1525  template <@\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@2>
     1526    @\addedConcepts{requires HasLess<Iter1, Iter2>}@
    15001527    bool operator<(
    1501       const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y);
    1502   template <class Iterator1, class Iterator2>
     1528      const move_iterator<Iter@\removedConcepts{ator}@1>& x, const move_iterator<Iter@\removedConcepts{ator}@2>& y);
     1529  template <@\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@2>
     1530    @\addedConcepts{requires HasLess<Iter2, Iter1>}@
    15031531    bool operator<=(
    1504       const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y);
    1505   template <class Iterator1, class Iterator2>
     1532      const move_iterator<Iter@\removedConcepts{ator}@1>& x, const move_iterator<Iter@\removedConcepts{ator}@2>& y);
     1533  template <@\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@2>
     1534    @\addedConcepts{requires HasLess<Iter2, Iter1>}@
    15061535    bool operator>(
    1507       const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y);
    1508   template <class Iterator1, class Iterator2>
     1536      const move_iterator<Iter@\removedConcepts{ator}@1>& x, const move_iterator<Iter@\removedConcepts{ator}@2>& y);
     1537  template <@\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@2>
     1538    @\addedConcepts{requires HasLess<Iter1, Iter2>}@
    15091539    bool operator>=(
    1510       const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y);
    1511 
    1512   template <class Iterator1, class Iterator2>
    1513     typename move_iterator<Iterator>::difference_type operator-(
    1514       const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y);
    1515   template <class Iterator>
     1540      const move_iterator<Iter@\removedConcepts{ator}@1>& x, const move_iterator<Iter@\removedConcepts{ator}@2>& y);
     1541
     1542  template <@\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@2>
     1543    @\addedConcepts{requires HasMinus<Iter1, Iter2>}@
     1544    auto operator-(
     1545      const move_iterator<Iter@\removedConcepts{ator}@1>& x,
     1546      const move_iterator<Iter@\removedConcepts{ator}@2>& y) -> decltype(x.base() - y.base());
     1547  template <@\changedConcepts{class}{RandomAccessIterator}@ Iterator>
    15161548    move_iterator<Iterator> operator+(
    1517       typename move_iterator<Iterator>::difference_type n, const move_iterator<Iterator>& x);
    1518   template <class Iterator>
    1519     move_iterator<Iterator> make_move_iterator(const Iterator& i);
     1549      @\changedConcepts{typename move_iterator<Iterator>}{Iter}@::difference_type n, const move_iterator<Iterator>& x);
     1550  template <@\changedConcepts{class}{InputIterator}@ Iter@\removedConcepts{ator}@>
     1551    move_iterator<Iter@\removedConcepts{ator}@> make_move_iterator(const Iterator& i);
     1552
     1553  @\addedConcepts{template<InputIterator Iter>}@
     1554    @\addedConcepts{concept_map InputIterator<move_iterator<Iter> > \{ \}}@
     1555  @\addedConcepts{template<ForwardIterator Iter>}@
     1556    @\addedConcepts{concept_map ForwardIterator<move_iterator<Iter> > \{ \}}@
     1557  @\addedConcepts{template<BidirectionalIterator Iter>}@
     1558    @\addedConcepts{concept_map BidirectionalIterator<move_iterator<Iter> > \{ \}}@
     1559  @\addedConcepts{template<RandomAccessIterator Iter>}@
     1560    @\addedConcepts{concept_map RandomAccessIterator<move_iterator<Iter> > \{ \}}@
    15201561}
    15211562\end{codeblock}
     
    15231564\rSec3[move.iter.requirements]{\tcode{move_iterator}\ requirements}
    15241565
    1525 \pnum
    1526 The template parameter \tcode{Iterator} shall meet
    1527 the requirements for an Input Iterator~(\ref{input.iterators}).
     1566\editorial{Remove [move.iter.requirements]}
     1567
     1568\pnum
     1569\removedConcepts{The template parameter \mbox{\tcode{Iterator}} shall meet
     1570the requirements for an Input Iterator~(\mbox{\ref{input.iterators}}).
    15281571Additionally, if any of the bidirectional or random access traversal
    15291572functions are instantiated, the template parameter shall meet the
    1530 requirements for a Bidirectional Iterator~(\ref{bidirectional.iterators})
    1531 or a Random Access Iterator~(\ref{random.access.iterators}), respectively.
     1573requirements for a Bidirectional Iterator~(\mbox{\ref{bidirectional.iterators}})
     1574or a Random Access Iterator~(\mbox{\ref{random.access.iterators}}), respectively.}
    15321575
    15331576\rSec3[move.iter.ops]{\tcode{move_iterator}\ operations}
     
    15471590
    15481591\begin{itemdecl}
    1549 explicit move_iterator(Iterator i};
     1592explicit move_iterator(Iter@\removedConcepts{ator}@ i};
    15501593\end{itemdecl}
    15511594
     
    15571600
    15581601\begin{itemdecl}
    1559 template <class U> move_iterator(const move_iterator<U>& u);
     1602template <class U>
     1603  @\addedConcepts{requires HasConstructor<Iter, const U\&>}@
     1604  move_iterator(const move_iterator<U>& u);
    15601605\end{itemdecl}
    15611606
     
    15661611
    15671612\pnum
    1568 \requires \tcode{U} shall be convertible to
    1569 \tcode{Iterator}.
     1613\removedConcepts{\mbox{\requires} \mbox{\tcode{U}} shall be convertible to
     1614\mbox{\tcode{Iterator}}.}
    15701615\end{itemdescr}
    15711616
     
    15731618
    15741619\begin{itemdecl}
    1575 template <class U> move_iterator& operator=(const move_iterator<U>& u);
     1620template <class U>
     1621  @\addedConcepts{requires HasAssign<Iter, const U\&>}@
     1622  move_iterator& operator=(const move_iterator<U>& u);
    15761623\end{itemdecl}
    15771624
     
    15821629
    15831630\pnum
    1584 \requires \tcode{U} shall be convertible to
    1585 \tcode{Iterator}.
     1631\removedConcepts{\mbox{\requires} \mbox{\tcode{U}} shall be convertible to
     1632\mbox{\tcode{Iterator}}.}
    15861633\end{itemdescr}
    15871634
     
    15891636
    15901637\begin{itemdecl}
    1591 Iterator base() const;
     1638Iter@\removedConcepts{ator}@ base() const;
    15921639\end{itemdecl}
    15931640
     
    16511698
    16521699\begin{itemdecl}
    1653 move_iterator& operator--();
     1700@\addedConcepts{requires BidirectionalIterator<Iter>}@ move_iterator& operator--();
    16541701\end{itemdecl}
    16551702
     
    16631710
    16641711\begin{itemdecl}
    1665 move_iterator& operator--(int);
     1712@\addedConcepts{requires BidirectionalIterator<Iter>}@ move_iterator& operator--(int);
    16661713\end{itemdecl}
    16671714
     
    16791726
    16801727\begin{itemdecl}
    1681 move_iterator operator+(difference_type n) const;
     1728@\addedConcepts{requires RandomAccessIterator<Iter>}@ move_iterator operator+(difference_type n) const;
    16821729\end{itemdecl}
    16831730
     
    16901737
    16911738\begin{itemdecl}
    1692 move_iterator& operator+=(difference_type n);
     1739@\addedConcepts{requires RandomAccessIterator<Iter>}@ move_iterator& operator+=(difference_type n);
    16931740\end{itemdecl}
    16941741
     
    17041751
    17051752\begin{itemdecl}
    1706 move_iterator operator-(difference_type n) const;
     1753@\addedConcepts{requires RandomAccessIterator<Iter>}@ move_iterator operator-(difference_type n) const;
    17071754\end{itemdecl}
    17081755
     
    17151762
    17161763\begin{itemdecl}
    1717 move_iterator& operator-=(difference_type n);
     1764@\addedConcepts{requires RandomAccessIterator<Iter>}@ move_iterator& operator-=(difference_type n);
    17181765\end{itemdecl}
    17191766
     
    17291776
    17301777\begin{itemdecl}
    1731 reference operator[](difference_type n) const;
     1778@\addedConcepts{requires RandomAccessIterator<Iter>}@
     1779  @\unspec@ operator[](difference_type n) const;
    17321780\end{itemdecl}
    17331781
     
    17411789
    17421790\begin{itemdecl}
    1743 template <class Iterator1, class Iterator2>
    1744 bool operator==(const move_iterator<Iterator1>& x, const move_iterator<Itrator2>& y);
     1791template <@\changedConcepts{class}{InputIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{InputIterator}@ Iter@\removedConcepts{ator}@2>
     1792  @\addedConcepts{requires HasEqualTo<Iter1, Iter2>}@
     1793  bool operator==(const move_iterator<Iter@\removedConcepts{ator}@1>& x, const move_iterator<Iter@\removedConcepts{ator}@2>& y);
    17451794\end{itemdecl}
    17461795
     
    17511800
    17521801\begin{itemdecl}
    1753 template <class Iterator1, class Iterator2>
    1754 bool operator!=(const move_iterator<Iterator1>& x, const move_iterator<Itrator2>& y);
     1802template <@\changedConcepts{class}{InputIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{InputIterator}@ Iter@\removedConcepts{ator}@2>
     1803  @\addedConcepts{requires HasEqualTo<Iter1, Iter2>}@
     1804  bool operator!=(const move_iterator<Iter@\removedConcepts{ator}@1>& x, const move_iterator<Iter@\removedConcepts{ator}@2>& y);
    17551805\end{itemdecl}
    17561806
     
    17611811
    17621812\begin{itemdecl}
    1763 template <class Iterator1, class Iterator2>
    1764 bool operator<(const move_iterator<Iterator1>& x, const move_iterator<Itrator2>& y);
     1813template <@\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@2>
     1814  @\addedConcepts{requires HasLess<Iter1, Iter2>}@
     1815  bool operator<(const move_iterator<Iter@\removedConcepts{ator}@1>& x, const move_iterator<Iter@\removedConcepts{ator}@2>& y);
    17651816\end{itemdecl}
    17661817
     
    17711822
    17721823\begin{itemdecl}
    1773 template <class Iterator1, class Iterator2>
    1774 bool operator<=(const move_iterator<Iterator1>& x, const move_iterator<Itrator2>& y);
     1824template <@\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@2>
     1825  @\addedConcepts{requires HasLess<Iter2, Iter1>}@
     1826  bool operator<=(const move_iterator<Iter@\removedConcepts{ator}@1>& x, const move_iterator<Iter@\removedConcepts{ator}@2>& y);
    17751827\end{itemdecl}
    17761828
     
    17811833
    17821834\begin{itemdecl}
    1783 template <class Iterator1, class Iterator2>
    1784 bool operator>(const move_iterator<Iterator1>& x, const move_iterator<Itrator2>& y);
     1835template <@\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@2>
     1836  @\addedConcepts{requires HasLess<Iter2, Iter1>}@
     1837  bool operator>(const move_iterator<Iter@\removedConcepts{ator}@1>& x, const move_iterator<Iter@\removedConcepts{ator}@2>& y);
    17851838\end{itemdecl}
    17861839
     
    17911844
    17921845\begin{itemdecl}
    1793 template <class Iterator1, class Iterator2>
    1794 bool operator>=(const move_iterator<Iterator1>& x, const move_iterator<Itrator2>& y);
     1846template <@\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@2>
     1847  @\addedConcepts{requires HasLess<Iter1, Iter2>}@
     1848  bool operator>=(const move_iterator<Iter@\removedConcepts{ator}@1>& x, const move_iterator<Iter@\removedConcepts{ator}@2>& y);
    17951849\end{itemdecl}
    17961850
     
    18031857
    18041858\begin{itemdecl}
    1805 template <class Iterator1, class Iterator2>
    1806   typename move_iterator<Iterator>::difference_type operator-(
    1807     const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y);
     1859template <@\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@1, @\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@2>
     1860  @\addedConcepts{requires HasMinus<Iter1, Iter2>}@
     1861  auto operator-(
     1862    const move_iterator<Iter@\removedConcepts{ator}@1>& x,
     1863    const move_iterator<Iter@\removedConcepts{ator}@2>& y) -> decltype(x.base() - y.base());
    18081864\end{itemdecl}
    18091865
     
    18141870
    18151871\begin{itemdecl}
    1816 template <class Iterator>
    1817   move_iterator<Iterator> operator+(
    1818     typename move_iterator<Iterator>::difference_type n, const move_iterator<Iterator>& x);
     1872template <@\changedConcepts{class}{RandomAccessIterator}@ Iter@\removedConcepts{ator}@>
     1873  move_iterator<Iter@\removedConcepts{ator}@> operator+(
     1874    @\changedConcepts{typename move_iterator<Iterator>}{Iter}@::difference_type n, const move_iterator<Iter@\removedConcepts{ator}@>& x);
    18191875\end{itemdecl}
    18201876
     
    18251881
    18261882\begin{itemdecl}
    1827 template <class Iterator>
    1828 move_iterator<Iterator> make_move_iterator(const Iterator& i);
    1829 \end{itemdecl}
    1830 
    1831 \begin{itemdescr}
    1832 \pnum
    1833 \returns \tcode{move_iterator<Iterator>(i)}.
     1883template <@\changedConcepts{class}{InputIterator}@ Iter@\removedConcepts{ator}@>
     1884move_iterator<Iter@\removedConcepts{ator}@> make_move_iterator(const Iterator& i);
     1885\end{itemdecl}
     1886
     1887\begin{itemdescr}
     1888\pnum
     1889\returns \tcode{move_iterator<Iter\removedConcepts{ator}>(i)}.
     1890\end{itemdescr}
     1891
     1892\rSec4[move.iter.maps]{Concept maps}
     1893\begin{itemdecl}
     1894@\addedConcepts{template<InputIterator Iter>}@
     1895  @\addedConcepts{concept_map InputIterator<move_iterator<Iter> > \{ \}}@
     1896\end{itemdecl}
     1897
     1898\begin{itemdescr}
     1899\pnum
     1900\addedConcepts{\reallynote Declares that a \mbox{\tcode{move_iterator}} is an input iterator.}
     1901\end{itemdescr}
     1902
     1903\begin{itemdecl}
     1904@\addedConcepts{template<ForwardIterator Iter>}@
     1905  @\addedConcepts{concept_map ForwardIterator<move_iterator<Iter> > \{ \}}@
     1906\end{itemdecl}
     1907
     1908\begin{itemdescr}
     1909\pnum
     1910\addedConcepts{\reallynote Declares that a \mbox{\tcode{move_iterator}} is a forward iterator if its underlying iterator is a forward iterator.}
     1911\end{itemdescr}
     1912
     1913\begin{itemdecl}
     1914@\addedConcepts{template<BidirectionalIterator Iter>}@
     1915  @\addedConcepts{concept_map BidirectionalIterator<move_iterator<Iter> > \{ \}}@
     1916\end{itemdecl}
     1917
     1918\begin{itemdescr}
     1919\pnum
     1920\addedConcepts{\reallynote Declares that a \mbox{\tcode{move_iterator}} is a bidirectional iterator if its underlying iterator is a bidirectional iterator.}
     1921\end{itemdescr}
     1922
     1923\begin{itemdecl}
     1924@\addedConcepts{template<RandomAccessIterator Iter>}@
     1925  @\addedConcepts{concept_map RandomAccessIterator<move_iterator<Iter> > \{ \}}@
     1926\end{itemdecl}
     1927
     1928\begin{itemdescr}
     1929\begin{itemdescr}
     1930\pnum
     1931\addedConcepts{\reallynote Declares that a \mbox{\tcode{move_iterator}} is a random access iterator if its underlying iterator is a random access iterator.}
     1932\end{itemdescr}
    18341933\end{itemdescr}
    18351934
Note: See TracChangeset for help on using the changeset viewer.