set.h (set<>::cbegin, [...]): Add.
authorPaolo Carlini <pcarlini@suse.de>
Mon, 15 Oct 2007 20:51:53 +0000 (20:51 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 15 Oct 2007 20:51:53 +0000 (20:51 +0000)
2007-10-15  Paolo Carlini  <pcarlini@suse.de>

* include/debug/set.h (set<>::cbegin, cend, crbegin, crend): Add.
* include/debug/multiset.h (set<>::cbegin, cend, crbegin, crend):
Likewise.
* include/debug/vector (vector<>::cbegin, cend, crbegin, crend):
Likewise.
* include/debug/map.h (map<>::cbegin, cend, crbegin, crend):
Likewise.
* include/debug/deque (deque<>::cbegin, cend, crbegin, crend):
Likewise.
* include/debug/list (list<>::cbegin, cend, crbegin, crend):
Likewise.
* include/debug/multimap.h (multimap<>::cbegin, cend, crbegin,
crend): Likewise.
* include/tr1_impl/array (array<>::cbegin, cend, crbegin, crend):
Likewise.
* include/ext/vstring.h (__versa_string<>::cbegin, cend, crbegin,
crend): Likewise.
* include/bits/stl_list.h (list<>::cbegin, cend, crbegin, crend):
Likewise.
* include/bits/stl_map.h (map<>::cbegin, cend, crbegin, crend):
Likewise.
* include/bits/stl_set.h (set<>::cbegin, cend, crbegin, crend):
Likewise.
* include/bits/stl_multimap.h (multimap<>::cbegin, cend, crbegin,
crend): Likewise.
* include/bits/stl_vector.h (vector<>::cbegin, cend, crbegin, crend):
Likewise.
* include/bits/stl_deque.h (deque<>::cbegin, cend, crbegin, crend):
Likewise.
* include/bits/stl_multiset.h (multiset<>::cbegin, cend, crbegin,
crend): Likewise.
* include/bits/stl_bvector.h (vector<bool>::cbegin, cend, crbegin,
crend): Likewise.
* include/tr1_impl/hashtable (_Hashtable<>::cbegin, cend): Add.

* testsuite/ext/vstring/requirements/citerators.cc: Add.
* testsuite/23_containers/unordered_map/requirements/citerators.cc:
Likewise.
* testsuite/23_containers/multimap/requirements/citerators.cc:
Likewise.
* testsuite/23_containers/set/requirements/citerators.cc: Likewise.
* testsuite/23_containers/unordered_multimap/requirements/
citerators.cc: Likewise.
* testsuite/23_containers/unordered_set/requirements/citerators.cc:
Likewise.
* testsuite/23_containers/vector/requirements/citerators.cc: Likewise.
* testsuite/23_containers/vector/bool/requirements/citerators.cc:
Likewise.
* testsuite/23_containers/deque/requirements/citerators.cc: Likewise.
* testsuite/23_containers/multiset/requirements/citerators.cc:
Likewise.
* testsuite/23_containers/list/requirements/citerators.cc: Likewise.
* testsuite/23_containers/unordered_multiset/requirements/
citerators.cc: Likewise.
* testsuite/23_containers/map/requirements/citerators.cc: Likewise.
* testsuite/23_containers/array/requirements/citerators.cc: Likewise.

* testsuite/23_containers/vector/requirements/dr438/assign_neg.cc:
Adjust dg-error lines.
* testsuite/23_containers/vector/requirements/dr438/insert_neg.cc:
Likewise.
* testsuite/23_containers/vector/requirements/dr438/
constructor_1_neg.cc: Likewise.
* testsuite/23_containers/vector/requirements/dr438/
constructor_2_neg.cc: Likewise.
* testsuite/23_containers/deque/requirements/dr438/assign_neg.cc:
Likewise.
* testsuite/23_containers/deque/requirements/dr438/insert_neg.cc:
Likewise.
* testsuite/23_containers/deque/requirements/dr438/
constructor_1_neg.cc: Likewise.
* testsuite/23_containers/deque/requirements/dr438/
constructor_2_neg.cc: Likewise.
* testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
Likewise.
* testsuite/23_containers/list/requirements/dr438/insert_neg.cc:
Likewise.
* testsuite/23_containers/list/requirements/dr438/
constructor_1_neg.cc: Likewise.
* testsuite/23_containers/list/requirements/dr438/
constructor_2_neg.cc: Likewise.

From-SVN: r129370

45 files changed:
libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/stl_bvector.h
libstdc++-v3/include/bits/stl_deque.h
libstdc++-v3/include/bits/stl_list.h
libstdc++-v3/include/bits/stl_map.h
libstdc++-v3/include/bits/stl_multimap.h
libstdc++-v3/include/bits/stl_multiset.h
libstdc++-v3/include/bits/stl_set.h
libstdc++-v3/include/bits/stl_vector.h
libstdc++-v3/include/debug/deque
libstdc++-v3/include/debug/list
libstdc++-v3/include/debug/map.h
libstdc++-v3/include/debug/multimap.h
libstdc++-v3/include/debug/multiset.h
libstdc++-v3/include/debug/set.h
libstdc++-v3/include/debug/vector
libstdc++-v3/include/ext/vstring.h
libstdc++-v3/include/tr1_impl/array
libstdc++-v3/include/tr1_impl/hashtable
libstdc++-v3/testsuite/23_containers/array/requirements/citerators.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/deque/requirements/citerators.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc
libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc
libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc
libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc
libstdc++-v3/testsuite/23_containers/list/requirements/citerators.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc
libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc
libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc
libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc
libstdc++-v3/testsuite/23_containers/map/requirements/citerators.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/multimap/requirements/citerators.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/multiset/requirements/citerators.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/set/requirements/citerators.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/unordered_map/requirements/citerators.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/citerators.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/citerators.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/unordered_set/requirements/citerators.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/vector/bool/requirements/citerators.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/vector/requirements/citerators.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc
libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc
libstdc++-v3/testsuite/ext/vstring/requirements/citerators.cc [new file with mode: 0644]

index 76b8aa5ab43fb48bbf136d3e17443d0a4e411d8d..c72ab4764f89e3d375f927e556f05a33fd1084d1 100644 (file)
@@ -1,3 +1,87 @@
+2007-10-15  Paolo Carlini  <pcarlini@suse.de>
+
+       * include/debug/set.h (set<>::cbegin, cend, crbegin, crend): Add.
+       * include/debug/multiset.h (set<>::cbegin, cend, crbegin, crend):
+       Likewise.
+       * include/debug/vector (vector<>::cbegin, cend, crbegin, crend):
+       Likewise.
+       * include/debug/map.h (map<>::cbegin, cend, crbegin, crend):
+       Likewise.
+       * include/debug/deque (deque<>::cbegin, cend, crbegin, crend): 
+       Likewise.
+       * include/debug/list (list<>::cbegin, cend, crbegin, crend):
+       Likewise.
+       * include/debug/multimap.h (multimap<>::cbegin, cend, crbegin,
+       crend): Likewise.
+       * include/tr1_impl/array (array<>::cbegin, cend, crbegin, crend):
+       Likewise.
+       * include/ext/vstring.h (__versa_string<>::cbegin, cend, crbegin,
+       crend): Likewise.
+       * include/bits/stl_list.h (list<>::cbegin, cend, crbegin, crend):
+       Likewise.
+       * include/bits/stl_map.h (map<>::cbegin, cend, crbegin, crend):
+       Likewise.
+       * include/bits/stl_set.h (set<>::cbegin, cend, crbegin, crend):
+       Likewise.
+       * include/bits/stl_multimap.h (multimap<>::cbegin, cend, crbegin,
+       crend): Likewise.
+       * include/bits/stl_vector.h (vector<>::cbegin, cend, crbegin, crend):
+       Likewise.
+       * include/bits/stl_deque.h (deque<>::cbegin, cend, crbegin, crend):
+       Likewise.
+       * include/bits/stl_multiset.h (multiset<>::cbegin, cend, crbegin,
+       crend): Likewise.
+       * include/bits/stl_bvector.h (vector<bool>::cbegin, cend, crbegin,
+       crend): Likewise.
+       * include/tr1_impl/hashtable (_Hashtable<>::cbegin, cend): Add. 
+
+       * testsuite/ext/vstring/requirements/citerators.cc: Add.
+       * testsuite/23_containers/unordered_map/requirements/citerators.cc:
+       Likewise.
+       * testsuite/23_containers/multimap/requirements/citerators.cc:
+       Likewise.
+       * testsuite/23_containers/set/requirements/citerators.cc: Likewise.
+       * testsuite/23_containers/unordered_multimap/requirements/
+       citerators.cc: Likewise.
+       * testsuite/23_containers/unordered_set/requirements/citerators.cc:
+       Likewise.
+       * testsuite/23_containers/vector/requirements/citerators.cc: Likewise.
+       * testsuite/23_containers/vector/bool/requirements/citerators.cc:
+       Likewise.
+       * testsuite/23_containers/deque/requirements/citerators.cc: Likewise.
+       * testsuite/23_containers/multiset/requirements/citerators.cc:
+       Likewise.
+       * testsuite/23_containers/list/requirements/citerators.cc: Likewise.
+       * testsuite/23_containers/unordered_multiset/requirements/
+       citerators.cc: Likewise.
+       * testsuite/23_containers/map/requirements/citerators.cc: Likewise.
+       * testsuite/23_containers/array/requirements/citerators.cc: Likewise.
+
+       * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc:
+       Adjust dg-error lines.
+       * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc:
+       Likewise.
+       * testsuite/23_containers/vector/requirements/dr438/
+       constructor_1_neg.cc: Likewise.
+       * testsuite/23_containers/vector/requirements/dr438/
+       constructor_2_neg.cc: Likewise.
+       * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc:
+       Likewise.
+       * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc:
+       Likewise.
+       * testsuite/23_containers/deque/requirements/dr438/
+       constructor_1_neg.cc: Likewise.
+       * testsuite/23_containers/deque/requirements/dr438/
+       constructor_2_neg.cc: Likewise.
+       * testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
+       Likewise.
+       * testsuite/23_containers/list/requirements/dr438/insert_neg.cc:
+       Likewise.
+       * testsuite/23_containers/list/requirements/dr438/
+       constructor_1_neg.cc: Likewise.
+       * testsuite/23_containers/list/requirements/dr438/
+       constructor_2_neg.cc: Likewise.
+
 2007-10-15  Paolo Carlini  <pcarlini@suse.de>
 
        PR libstdc++/33773 (cont)
index db9061b90fb528562617ce5220c082ba0c82f8cd..a7044564d96b846a25eb9af7410aa64415e4ec68 100644 (file)
@@ -602,6 +602,24 @@ template<typename _Alloc>
     rend() const
     { return const_reverse_iterator(begin()); }
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+    const_iterator
+    cbegin() const
+    { return this->_M_impl._M_start; }
+
+    const_iterator
+    cend() const
+    { return this->_M_impl._M_finish; }
+
+    const_reverse_iterator
+    crbegin() const
+    { return const_reverse_iterator(end()); }
+
+    const_reverse_iterator
+    crend() const
+    { return const_reverse_iterator(begin()); }
+#endif
+
     size_type
     size() const
     { return size_type(end() - begin()); }
index 7a7b86e2d38ee6e5bb8852d8c88f991a184ad454..41cd231f4466263c0b5722b998eaa45072e5f62a 100644 (file)
@@ -909,6 +909,43 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
       rend() const
       { return const_reverse_iterator(this->_M_impl._M_start); }
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+      /**
+       *  Returns a read-only (constant) iterator that points to the first
+       *  element in the %deque.  Iteration is done in ordinary element order.
+       */
+      const_iterator
+      cbegin() const
+      { return this->_M_impl._M_start; }
+
+      /**
+       *  Returns a read-only (constant) iterator that points one past
+       *  the last element in the %deque.  Iteration is done in
+       *  ordinary element order.
+       */
+      const_iterator
+      cend() const
+      { return this->_M_impl._M_finish; }
+
+      /**
+       *  Returns a read-only (constant) reverse iterator that points
+       *  to the last element in the %deque.  Iteration is done in
+       *  reverse element order.
+       */
+      const_reverse_iterator
+      crbegin() const
+      { return const_reverse_iterator(this->_M_impl._M_finish); }
+
+      /**
+       *  Returns a read-only (constant) reverse iterator that points
+       *  to one before the first element in the %deque.  Iteration is
+       *  done in reverse element order.
+       */
+      const_reverse_iterator
+      crend() const
+      { return const_reverse_iterator(this->_M_impl._M_start); }
+#endif
+
       // [23.2.1.2] capacity
       /**  Returns the number of elements in the %deque.  */
       size_type
index 2b690eb54867dbf8a4cbd2a50278fb2eb24cde17..7bdeacb33fa5e343d48b0bead647819ceb8b9b3b 100644 (file)
@@ -691,6 +691,44 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
       rend() const
       { return const_reverse_iterator(begin()); }
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+      /**
+       *  Returns a read-only (constant) iterator that points to the
+       *  first element in the %list.  Iteration is done in ordinary
+       *  element order.
+       */
+      const_iterator
+      cbegin() const
+      { return const_iterator(this->_M_impl._M_node._M_next); }
+
+      /**
+       *  Returns a read-only (constant) iterator that points one past
+       *  the last element in the %list.  Iteration is done in ordinary
+       *  element order.
+       */
+      const_iterator
+      cend() const
+      { return const_iterator(&this->_M_impl._M_node); }
+
+      /**
+       *  Returns a read-only (constant) reverse iterator that points to
+       *  the last element in the %list.  Iteration is done in reverse
+       *  element order.
+       */
+      const_reverse_iterator
+      crbegin() const
+      { return const_reverse_iterator(end()); }
+
+      /**
+       *  Returns a read-only (constant) reverse iterator that points to one
+       *  before the first element in the %list.  Iteration is done in reverse
+       *  element order.
+       */
+      const_reverse_iterator
+      crend() const
+      { return const_reverse_iterator(begin()); }
+#endif
+
       // [23.2.2.2] capacity
       /**
        *  Returns true if the %list is empty.  (Thus begin() would equal
index f4545a02d4e0df0d445d1bcc46c68a7db24589b2..28b396e31e0eb0a742741f04a477c2731035a01e 100644 (file)
@@ -340,6 +340,44 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
       rend() const
       { return _M_t.rend(); }
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+      /**
+       *  Returns a read-only (constant) iterator that points to the first pair
+       *  in the %map.  Iteration is done in ascending order according to the
+       *  keys.
+       */
+      const_iterator
+      cbegin() const
+      { return _M_t.begin(); }
+
+      /**
+       *  Returns a read-only (constant) iterator that points one past the last
+       *  pair in the %map.  Iteration is done in ascending order according to
+       *  the keys.
+       */
+      const_iterator
+      cend() const
+      { return _M_t.end(); }
+
+      /**
+       *  Returns a read-only (constant) reverse iterator that points to the
+       *  last pair in the %map.  Iteration is done in descending order
+       *  according to the keys.
+       */
+      const_reverse_iterator
+      crbegin() const
+      { return _M_t.rbegin(); }
+
+      /**
+       *  Returns a read-only (constant) reverse iterator that points to one
+       *  before the first pair in the %map.  Iteration is done in descending
+       *  order according to the keys.
+       */
+      const_reverse_iterator
+      crend() const
+      { return _M_t.rend(); }
+#endif
+
       // capacity
       /** Returns true if the %map is empty.  (Thus begin() would equal
        *  end().)
index 864f4b21bbe8140113469df5d2c8cee4a67899a6..1c1883a865157e9692b3448f04a9a1fbb7f92617 100644 (file)
@@ -338,6 +338,44 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
       rend() const
       { return _M_t.rend(); }
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+      /**
+       *  Returns a read-only (constant) iterator that points to the first pair
+       *  in the %multimap.  Iteration is done in ascending order according to
+       *  the keys.
+       */
+      const_iterator
+      cbegin() const
+      { return _M_t.begin(); }
+
+      /**
+       *  Returns a read-only (constant) iterator that points one past the last
+       *  pair in the %multimap.  Iteration is done in ascending order according
+       *  to the keys.
+       */
+      const_iterator
+      cend() const
+      { return _M_t.end(); }
+
+      /**
+       *  Returns a read-only (constant) reverse iterator that points to the
+       *  last pair in the %multimap.  Iteration is done in descending order
+       *  according to the keys.
+       */
+      const_reverse_iterator
+      crbegin() const
+      { return _M_t.rbegin(); }
+
+      /**
+       *  Returns a read-only (constant) reverse iterator that points to one
+       *  before the first pair in the %multimap.  Iteration is done in
+       *  descending order according to the keys.
+       */
+      const_reverse_iterator
+      crend() const
+      { return _M_t.rend(); }
+#endif
+
       // capacity
       /** Returns true if the %multimap is empty.  */
       bool
index 6e45b8fbcb4c094f236709b4afe0917cd4d53308..55ec0472defb7151813f05d86422f7f764509e7d 100644 (file)
@@ -248,41 +248,79 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
       { return _M_t.get_allocator(); }
 
       /**
-       *  Returns a read/write iterator that points to the first element in the
-       *  %multiset.  Iteration is done in ascending order according to the
-       *  keys.
+       *  Returns a read-only (constant) iterator that points to the first
+       *  element in the %multiset.  Iteration is done in ascending order
+       *  according to the keys.
        */
       iterator
       begin() const
       { return _M_t.begin(); }
 
       /**
-       *  Returns a read/write iterator that points one past the last element in
-       *  the %multiset.  Iteration is done in ascending order according to the
-       *  keys.
+       *  Returns a read-only (constant) iterator that points one past the last
+       *  element in the %multiset.  Iteration is done in ascending order
+       *  according to the keys.
        */
       iterator
       end() const
       { return _M_t.end(); }
 
       /**
-       *  Returns a read/write reverse iterator that points to the last element
-       *  in the %multiset.  Iteration is done in descending order according to
-       *  the keys.
+       *  Returns a read-only (constant) reverse iterator that points to the
+       *  last element in the %multiset.  Iteration is done in descending order
+       *  according to the keys.
        */
       reverse_iterator
       rbegin() const
       { return _M_t.rbegin(); }
 
       /**
-       *  Returns a read/write reverse iterator that points to the last element
-       *  in the %multiset.  Iteration is done in descending order according to
-       *  the keys.
+       *  Returns a read-only (constant) reverse iterator that points to the
+       *  last element in the %multiset.  Iteration is done in descending order
+       *  according to the keys.
        */
       reverse_iterator
       rend() const
       { return _M_t.rend(); }
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+      /**
+       *  Returns a read-only (constant) iterator that points to the first
+       *  element in the %multiset.  Iteration is done in ascending order
+       *  according to the keys.
+       */
+      iterator
+      cbegin() const
+      { return _M_t.begin(); }
+
+      /**
+       *  Returns a read-only (constant) iterator that points one past the last
+       *  element in the %multiset.  Iteration is done in ascending order
+       *  according to the keys.
+       */
+      iterator
+      cend() const
+      { return _M_t.end(); }
+
+      /**
+       *  Returns a read-only (constant) reverse iterator that points to the
+       *  last element in the %multiset.  Iteration is done in descending order
+       *  according to the keys.
+       */
+      reverse_iterator
+      crbegin() const
+      { return _M_t.rbegin(); }
+
+      /**
+       *  Returns a read-only (constant) reverse iterator that points to the
+       *  last element in the %multiset.  Iteration is done in descending order
+       *  according to the keys.
+       */
+      reverse_iterator
+      crend() const
+      { return _M_t.rend(); }
+#endif
+
       ///  Returns true if the %set is empty.
       bool
       empty() const
index 2b51bfaa9700f208ed6e3f6110efef75cca85799..1d6284867107653f8f6bcaee8d344638707b4e60 100644 (file)
@@ -255,25 +255,27 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
       { return _M_t.get_allocator(); }
 
       /**
-       *  Returns a read/write iterator that points to the first element in the
-       *  %set.  Iteration is done in ascending order according to the keys.
+       *  Returns a read-only (constant) iterator that points to the first
+       *  element in the %set.  Iteration is done in ascending order according
+       *  to the keys.
        */
       iterator
       begin() const
       { return _M_t.begin(); }
 
       /**
-       *  Returns a read/write iterator that points one past the last element in
-       *  the %set.  Iteration is done in ascending order according to the keys.
+       *  Returns a read-only (constant) iterator that points one past the last
+       *  element in the %set.  Iteration is done in ascending order according
+       *  to the keys.
        */
       iterator
       end() const
       { return _M_t.end(); }
 
       /**
-       *  Returns a read/write reverse iterator that points to the last element
-       *  in the %set.  Iteration is done in descending order according to the
-       *  keys.
+       *  Returns a read-only (constant) iterator that points to the last
+       *  element in the %set.  Iteration is done in descending order according
+       *  to the keys.
        */
       reverse_iterator
       rbegin() const
@@ -281,13 +283,51 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
 
       /**
        *  Returns a read-only (constant) reverse iterator that points to the
-       *  last pair in the %map.  Iteration is done in descending order
+       *  last pair in the %set.  Iteration is done in descending order
        *  according to the keys.
        */
       reverse_iterator
       rend() const
       { return _M_t.rend(); }
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+      /**
+       *  Returns a read-only (constant) iterator that points to the first
+       *  element in the %set.  Iteration is done in ascending order according
+       *  to the keys.
+       */
+      iterator
+      cbegin() const
+      { return _M_t.begin(); }
+
+      /**
+       *  Returns a read-only (constant) iterator that points one past the last
+       *  element in the %set.  Iteration is done in ascending order according
+       *  to the keys.
+       */
+      iterator
+      cend() const
+      { return _M_t.end(); }
+
+      /**
+       *  Returns a read-only (constant) iterator that points to the last
+       *  element in the %set.  Iteration is done in descending order according
+       *  to the keys.
+       */
+      reverse_iterator
+      crbegin() const
+      { return _M_t.rbegin(); }
+
+      /**
+       *  Returns a read-only (constant) reverse iterator that points to the
+       *  last pair in the %set.  Iteration is done in descending order
+       *  according to the keys.
+       */
+      reverse_iterator
+      crend() const
+      { return _M_t.rend(); }
+#endif
+
       ///  Returns true if the %set is empty.
       bool
       empty() const
index 2f3384d8cc11c712fdb8136bd20603e6c4fb8fdc..745ef79ed10c5eb589ac2abbbe2520f0ba8f1fe2 100644 (file)
@@ -430,6 +430,44 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
       rend() const
       { return const_reverse_iterator(begin()); }
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+      /**
+       *  Returns a read-only (constant) iterator that points to the
+       *  first element in the %vector.  Iteration is done in ordinary
+       *  element order.
+       */
+      const_iterator
+      cbegin() const
+      { return const_iterator(this->_M_impl._M_start); }
+
+      /**
+       *  Returns a read-only (constant) iterator that points one past
+       *  the last element in the %vector.  Iteration is done in
+       *  ordinary element order.
+       */
+      const_iterator
+      cend() const
+      { return const_iterator(this->_M_impl._M_finish); }
+
+      /**
+       *  Returns a read-only (constant) reverse iterator that points
+       *  to the last element in the %vector.  Iteration is done in
+       *  reverse element order.
+       */
+      const_reverse_iterator
+      crbegin() const
+      { return const_reverse_iterator(end()); }
+
+      /**
+       *  Returns a read-only (constant) reverse iterator that points
+       *  to one before the first element in the %vector.  Iteration
+       *  is done in reverse element order.
+       */
+      const_reverse_iterator
+      crend() const
+      { return const_reverse_iterator(begin()); }
+#endif
+
       // [23.2.4.2] capacity
       /**  Returns the number of elements in the %vector.  */
       size_type
index 47023f8944d486f54331de0b36ac03d5ba3a8a7b..6571d151b1a991af3a9ca2210ca2f09d9f8ceea9 100644 (file)
@@ -166,6 +166,24 @@ namespace __debug
       rend() const
       { return const_reverse_iterator(begin()); }
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+      const_iterator
+      cbegin() const
+      { return const_iterator(_Base::begin(), this); }
+
+      const_iterator
+      cend() const
+      { return const_iterator(_Base::end(), this); }
+
+      const_reverse_iterator
+      crbegin() const
+      { return const_reverse_iterator(end()); }
+
+      const_reverse_iterator
+      crend() const
+      { return const_reverse_iterator(begin()); }
+#endif
+
       // 23.2.1.2 capacity:
       using _Base::size;
       using _Base::max_size;
index a277856c7fc6c1d723493bf9db25e87e001131d1..717433471cb8a4e6eea10f5e85c85657b8b759f7 100644 (file)
@@ -195,6 +195,24 @@ namespace __debug
       rend() const
       { return const_reverse_iterator(begin()); }
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+      const_iterator
+      cbegin() const
+      { return const_iterator(_Base::begin(), this); }
+
+      const_iterator
+      cend() const
+      { return const_iterator(_Base::end(), this); }
+
+      const_reverse_iterator
+      crbegin() const
+      { return const_reverse_iterator(end()); }
+
+      const_reverse_iterator
+      crend() const
+      { return const_reverse_iterator(begin()); }
+#endif
+
       // 23.2.2.2 capacity:
       using _Base::empty;
       using _Base::size;
index 11982cf5302605ce325f309f88916b7e5dea7c0c..671e1f8365e518097b950e6a3f0015297fa34c5b 100644 (file)
@@ -156,6 +156,24 @@ namespace __debug
       rend() const
       { return const_reverse_iterator(begin()); }
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+      const_iterator
+      cbegin() const
+      { return const_iterator(_Base::begin(), this); }
+
+      const_iterator
+      cend() const
+      { return const_iterator(_Base::end(), this); }
+
+      const_reverse_iterator
+      crbegin() const
+      { return const_reverse_iterator(end()); }
+
+      const_reverse_iterator
+      crend() const
+      { return const_reverse_iterator(begin()); }
+#endif
+
       // capacity:
       using _Base::empty;
       using _Base::size;
index d392f7e554e77dd8ae2f7c4b680f11efe16af4fa..1dd4de81df1a093e19b74f335b40c5cd7cf07ccc 100644 (file)
@@ -155,6 +155,24 @@ namespace __debug
       rend() const
       { return const_reverse_iterator(begin()); }
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+      const_iterator
+      cbegin() const
+      { return const_iterator(_Base::begin(), this); }
+
+      const_iterator
+      cend() const
+      { return const_iterator(_Base::end(), this); }
+
+      const_reverse_iterator
+      crbegin() const
+      { return const_reverse_iterator(end()); }
+
+      const_reverse_iterator
+      crend() const
+      { return const_reverse_iterator(begin()); }
+#endif
+
       // capacity:
       using _Base::empty;
       using _Base::size;
index df9e93ace9b9ea6ec3078ecf9b952b4bde1f8c44..7c58db17b5cc9d7b1af7f62639703eb99ed4f9e0 100644 (file)
@@ -152,6 +152,24 @@ namespace __debug
       rend() const
       { return const_reverse_iterator(begin()); }
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+      const_iterator
+      cbegin() const
+      { return const_iterator(_Base::begin(), this); }
+
+      const_iterator
+      cend() const
+      { return const_iterator(_Base::end(), this); }
+
+      const_reverse_iterator
+      crbegin() const
+      { return const_reverse_iterator(end()); }
+
+      const_reverse_iterator
+      crend() const
+      { return const_reverse_iterator(begin()); }
+#endif
+
       // capacity:
       using _Base::empty;
       using _Base::size;
index 8554c0f0c90720d495fe14dd4fe3a85a7fc91e92..bebc34c0083a177cdc0a49c84cfe805de657f390 100644 (file)
@@ -152,6 +152,24 @@ namespace __debug
       rend() const
       { return const_reverse_iterator(begin()); }
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+      const_iterator
+      cbegin() const
+      { return const_iterator(_Base::begin(), this); }
+
+      const_iterator
+      cend() const
+      { return const_iterator(_Base::end(), this); }
+
+      const_reverse_iterator
+      crbegin() const
+      { return const_reverse_iterator(end()); }
+
+      const_reverse_iterator
+      crend() const
+      { return const_reverse_iterator(begin()); }
+#endif
+
       // capacity:
       using _Base::empty;
       using _Base::size;
index b010ee00ebb3e00b24249216465285c4de39c994..ce44241004bb66a07a2b6b05a79765c65cc84e19 100644 (file)
@@ -181,6 +181,24 @@ namespace __debug
       rend() const
       { return const_reverse_iterator(begin()); }
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+      const_iterator
+      cbegin() const
+      { return const_iterator(_Base::begin(), this); }
+
+      const_iterator
+      cend() const
+      { return const_iterator(_Base::end(), this); }
+
+      const_reverse_iterator
+      crbegin() const
+      { return const_reverse_iterator(end()); }
+
+      const_reverse_iterator
+      crend() const
+      { return const_reverse_iterator(begin()); }
+#endif
+
       // 23.2.4.2 capacity:
       using _Base::size;
       using _Base::max_size;
index b20faa8f98763f4cc632f3fb7de98339dbeb4a63..1f1965efb3e23112824687476e3bb4ea6a611b4e 100644 (file)
@@ -327,6 +327,42 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
       rend() const
       { return const_reverse_iterator(this->begin()); }
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+      /**
+       *  Returns a read-only (constant) iterator that points to the first
+       *  character in the %string.
+       */
+      const_iterator
+      cbegin() const
+      { return const_iterator(this->_M_data()); }
+
+      /**
+       *  Returns a read-only (constant) iterator that points one past the
+       *  last character in the %string.
+       */
+      const_iterator
+      cend() const
+      { return const_iterator(this->_M_data() + this->size()); }
+
+      /**
+       *  Returns a read-only (constant) reverse iterator that points
+       *  to the last character in the %string.  Iteration is done in
+       *  reverse element order.
+       */
+      const_reverse_iterator
+      crbegin() const
+      { return const_reverse_iterator(this->end()); }
+
+      /**
+       *  Returns a read-only (constant) reverse iterator that points
+       *  to one before the first character in the %string.  Iteration
+       *  is done in reverse element order.
+       */
+      const_reverse_iterator
+      crend() const
+      { return const_reverse_iterator(this->begin()); }
+#endif
+
     public:
       // Capacity:
       ///  Returns the number of characters in the string, not including any
index 994d4ddcf6d7b948759c62624ec90767dd697b37..759f00e4b5a494f0902e1163d5bc09c9f511e55d 100644 (file)
@@ -97,6 +97,24 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
       rend() const
       { return const_reverse_iterator(begin()); }
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+      const_iterator
+      cbegin() const 
+      { return const_iterator(&_M_instance[0]); }
+
+      const_iterator
+      cend() const
+      { return const_iterator(&_M_instance[_Nm]); }
+
+      const_reverse_iterator 
+      crbegin() const
+      { return const_reverse_iterator(end()); }
+
+      const_reverse_iterator 
+      crend() const
+      { return const_reverse_iterator(begin()); }
+#endif
+
       // Capacity.
       size_type 
       size() const { return _Nm; }
index 0255e1a7cb3fe0ed2609b7a9a1e06bfc96820b52..1f7deed068a6630445c9babbb6ace520fcdfcc7e 100644 (file)
@@ -252,6 +252,21 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
       end() const
       { return const_iterator(_M_buckets + _M_bucket_count); }
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+      const_iterator
+      cbegin() const
+      {
+       const_iterator __i(_M_buckets);
+       if (!__i._M_cur_node)
+         __i._M_incr_bucket();
+       return __i;
+      }
+
+      const_iterator
+      cend() const
+      { return const_iterator(_M_buckets + _M_bucket_count); }
+#endif
+
       size_type
       size() const
       { return _M_element_count; }
diff --git a/libstdc++-v3/testsuite/23_containers/array/requirements/citerators.cc b/libstdc++-v3/testsuite/23_containers/array/requirements/citerators.cc
new file mode 100644 (file)
index 0000000..4e2cccf
--- /dev/null
@@ -0,0 +1,53 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2007-10-15  Paolo Carlini  <pcarlini@suse.de>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <array>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  std::array<int, 7> a;
+  VERIFY( a.cbegin() == a.begin() );
+  VERIFY( a.cend() == a.end() );
+  VERIFY( a.crbegin() == a.rbegin() );
+  VERIFY( a.crend() == a.rend() );
+  VERIFY( a.cbegin() != a.cend() );
+  VERIFY( a.crbegin() != a.crend() );  
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/citerators.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/citerators.cc
new file mode 100644 (file)
index 0000000..e869a28
--- /dev/null
@@ -0,0 +1,53 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2007-10-15  Paolo Carlini  <pcarlini@suse.de>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <deque>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  std::deque<int> d(7);
+  VERIFY( d.cbegin() == d.begin() );
+  VERIFY( d.cend() == d.end() );
+  VERIFY( d.crbegin() == d.rbegin() );
+  VERIFY( d.crend() == d.rend() );
+  VERIFY( d.cbegin() != d.cend() );
+  VERIFY( d.crbegin() != d.crend() );  
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
index 8fde473dc7ac47b4f12a7fd217828b935462be00..75b656d0a4b19d21882232e892695fc840baea61 100644 (file)
@@ -19,7 +19,7 @@
 // USA.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1349 }
+// { dg-error "no matching" "" { target *-*-* } 1386 }
 // { dg-excess-errors "" }
 
 #include <deque>
index 3124e19af270d76f02a87a199bd87712f16e4b27..f8cdee357dbdf251025c4a21fd20678c8067836f 100644 (file)
@@ -19,7 +19,7 @@
 // USA.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1284 }
+// { dg-error "no matching" "" { target *-*-* } 1321 }
 // { dg-excess-errors "" }
 
 #include <deque>
index 1f6115c5d3ceddaa7a04c6ad89a4fd5b678371a2..5e652c697887a5a61feb047b2087ca191227d7f3 100644 (file)
@@ -19,7 +19,7 @@
 // USA.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1284 }
+// { dg-error "no matching" "" { target *-*-* } 1321 }
 // { dg-excess-errors "" }
 
 #include <deque>
index 9d6365932dd62827a752dd119fa01aa998e26e52..67cb8a625ffac4d0d4fee7cf501dc26632d51848 100644 (file)
@@ -19,7 +19,7 @@
 // USA.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1429 }
+// { dg-error "no matching" "" { target *-*-* } 1466 }
 // { dg-excess-errors "" }
 
 #include <deque>
diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/citerators.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/citerators.cc
new file mode 100644 (file)
index 0000000..d9ef758
--- /dev/null
@@ -0,0 +1,53 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2007-10-15  Paolo Carlini  <pcarlini@suse.de>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <list>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  std::list<int> l(7);
+  VERIFY( l.cbegin() == l.begin() );
+  VERIFY( l.cend() == l.end() );
+  VERIFY( l.crbegin() == l.rbegin() );
+  VERIFY( l.crend() == l.rend() );
+  VERIFY( l.cbegin() != l.cend() );
+  VERIFY( l.crbegin() != l.crend() );  
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
index ccabf384ead5407ed8effa386f12df44a85df56c..e47411eb1a6bd3e2b53b8427acb43816da4f7421 100644 (file)
@@ -19,7 +19,7 @@
 // USA.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1188 }
+// { dg-error "no matching" "" { target *-*-* } 1226 }
 // { dg-excess-errors "" }
 
 #include <list>
index 0711505092fd31970b746f31245049dea883e0ea..69bd5b48ba8a614fa0345f8b8115aa92a84ee884 100644 (file)
@@ -19,7 +19,7 @@
 // USA.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1157 }
+// { dg-error "no matching" "" { target *-*-* } 1195 }
 // { dg-excess-errors "" }
 
 #include <list>
index 1e02ca8913ef576cef7b9f9dfb7d7b8f2cf58275..49b4f7cd5043e12e580c70d4de67cc48e5e79e9f 100644 (file)
@@ -19,7 +19,7 @@
 // USA.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1157 }
+// { dg-error "no matching" "" { target *-*-* } 1195 }
 // { dg-excess-errors "" }
 
 #include <list>
index 04b3c2b95c207083c85cb65f07b08ed85e133dde..af21a0c890248e1b1ef091c0003e188c15898b58 100644 (file)
@@ -19,7 +19,7 @@
 // USA.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1157 }
+// { dg-error "no matching" "" { target *-*-* } 1195 }
 // { dg-excess-errors "" }
 
 #include <list>
diff --git a/libstdc++-v3/testsuite/23_containers/map/requirements/citerators.cc b/libstdc++-v3/testsuite/23_containers/map/requirements/citerators.cc
new file mode 100644 (file)
index 0000000..320d46d
--- /dev/null
@@ -0,0 +1,54 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2007-10-15  Paolo Carlini  <pcarlini@suse.de>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <map>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  std::map<int, int> m;
+  m[1] = 1;
+  VERIFY( m.cbegin() == m.begin() );
+  VERIFY( m.cend() == m.end() );
+  VERIFY( m.crbegin() == m.rbegin() );
+  VERIFY( m.crend() == m.rend() );
+  VERIFY( m.cbegin() != m.cend() );
+  VERIFY( m.crbegin() != m.crend() );  
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/requirements/citerators.cc b/libstdc++-v3/testsuite/23_containers/multimap/requirements/citerators.cc
new file mode 100644 (file)
index 0000000..ec01d38
--- /dev/null
@@ -0,0 +1,55 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2007-10-15  Paolo Carlini  <pcarlini@suse.de>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <map>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  typedef std::multimap<int, int> mm_type;
+  mm_type mm;
+  mm.insert(mm_type::value_type(1, 1));
+  VERIFY( mm.cbegin() == mm.begin() );
+  VERIFY( mm.cend() == mm.end() );
+  VERIFY( mm.crbegin() == mm.rbegin() );
+  VERIFY( mm.crend() == mm.rend() );
+  VERIFY( mm.cbegin() != mm.cend() );
+  VERIFY( mm.crbegin() != mm.crend() );  
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/requirements/citerators.cc b/libstdc++-v3/testsuite/23_containers/multiset/requirements/citerators.cc
new file mode 100644 (file)
index 0000000..48e3d49
--- /dev/null
@@ -0,0 +1,54 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2007-10-15  Paolo Carlini  <pcarlini@suse.de>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <set>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  std::multiset<int> ms;
+  ms.insert(1);
+  VERIFY( ms.cbegin() == ms.begin() );
+  VERIFY( ms.cend() == ms.end() );
+  VERIFY( ms.crbegin() == ms.rbegin() );
+  VERIFY( ms.crend() == ms.rend() );
+  VERIFY( ms.cbegin() != ms.cend() );
+  VERIFY( ms.crbegin() != ms.crend() );  
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/set/requirements/citerators.cc b/libstdc++-v3/testsuite/23_containers/set/requirements/citerators.cc
new file mode 100644 (file)
index 0000000..3fd624b
--- /dev/null
@@ -0,0 +1,54 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2007-10-15  Paolo Carlini  <pcarlini@suse.de>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <set>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  std::set<int> s;
+  s.insert(1);
+  VERIFY( s.cbegin() == s.begin() );
+  VERIFY( s.cend() == s.end() );
+  VERIFY( s.crbegin() == s.rbegin() );
+  VERIFY( s.crend() == s.rend() );
+  VERIFY( s.cbegin() != s.cend() );
+  VERIFY( s.crbegin() != s.crend() );  
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/citerators.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/citerators.cc
new file mode 100644 (file)
index 0000000..a14ad0e
--- /dev/null
@@ -0,0 +1,51 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2007-10-15  Paolo Carlini  <pcarlini@suse.de>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <unordered_map>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  std::unordered_map<int, int> um;
+  um[1] = 1;
+  VERIFY( um.cbegin() == um.begin() );
+  VERIFY( um.cend() == um.end() );
+  VERIFY( um.cbegin() != um.cend() );
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/citerators.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/requirements/citerators.cc
new file mode 100644 (file)
index 0000000..9d48072
--- /dev/null
@@ -0,0 +1,52 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2007-10-15  Paolo Carlini  <pcarlini@suse.de>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <unordered_map>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  typedef std::unordered_multimap<int, int> umm_type;
+  umm_type umm;
+  umm.insert(umm_type::value_type(1, 1));
+  VERIFY( umm.cbegin() == umm.begin() );
+  VERIFY( umm.cend() == umm.end() );
+  VERIFY( umm.cbegin() != umm.cend() );
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/citerators.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/requirements/citerators.cc
new file mode 100644 (file)
index 0000000..fd54edc
--- /dev/null
@@ -0,0 +1,51 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2007-10-15  Paolo Carlini  <pcarlini@suse.de>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <unordered_set>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  std::unordered_multiset<int> ums;
+  ums.insert(1);
+  VERIFY( ums.cbegin() == ums.begin() );
+  VERIFY( ums.cend() == ums.end() );
+  VERIFY( ums.cbegin() != ums.cend() );
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/citerators.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/citerators.cc
new file mode 100644 (file)
index 0000000..f358a0f
--- /dev/null
@@ -0,0 +1,51 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2007-10-15  Paolo Carlini  <pcarlini@suse.de>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <unordered_set>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  std::unordered_set<int> us;
+  us.insert(1);
+  VERIFY( us.cbegin() == us.begin() );
+  VERIFY( us.cend() == us.end() );
+  VERIFY( us.cbegin() != us.cend() );
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/requirements/citerators.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/requirements/citerators.cc
new file mode 100644 (file)
index 0000000..a6ebd17
--- /dev/null
@@ -0,0 +1,53 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2007-10-15  Paolo Carlini  <pcarlini@suse.de>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <vector>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  std::vector<bool> vb(7);
+  VERIFY( vb.cbegin() == vb.begin() );
+  VERIFY( vb.cend() == vb.end() );
+  VERIFY( vb.crbegin() == vb.rbegin() );
+  VERIFY( vb.crend() == vb.rend() );
+  VERIFY( vb.cbegin() != vb.cend() );
+  VERIFY( vb.crbegin() != vb.crend() );  
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/citerators.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/citerators.cc
new file mode 100644 (file)
index 0000000..9975338
--- /dev/null
@@ -0,0 +1,53 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2007-10-15  Paolo Carlini  <pcarlini@suse.de>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <vector>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  std::vector<int> v(7);
+  VERIFY( v.cbegin() == v.begin() );
+  VERIFY( v.cend() == v.end() );
+  VERIFY( v.crbegin() == v.rbegin() );
+  VERIFY( v.crend() == v.rend() );
+  VERIFY( v.cbegin() != v.cend() );
+  VERIFY( v.crbegin() != v.crend() );  
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
index 4239d4df3c55da648747809729f01fecf53077ce..33c2c04989ab193f27c4da994eed24aeae3c0484 100644 (file)
@@ -19,7 +19,7 @@
 // USA.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 895 }
+// { dg-error "no matching" "" { target *-*-* } 933 }
 // { dg-excess-errors "" }
 
 #include <vector>
index 7faf1e2feb6e419d16420beb1d5cc6de9df5fc07..846cd04e6c6b099bf67cb7fb958bd0d39edee691 100644 (file)
@@ -19,7 +19,7 @@
 // USA.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 835 }
+// { dg-error "no matching" "" { target *-*-* } 873 }
 // { dg-excess-errors "" }
 
 #include <vector>
index 66c0206044e47cdfa3e8be2a1922b3cb13aa0424..8dab6ce3195e2418f4a79b4f4a64ad875967a140 100644 (file)
@@ -19,7 +19,7 @@
 // USA.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 835 }
+// { dg-error "no matching" "" { target *-*-* } 873 }
 // { dg-excess-errors "" }
 
 #include <vector>
index 6aae607479f1684656aae01cf570aebb6f21b66e..b97f22241d9858e991f53d297ae59ca1aec431f6 100644 (file)
@@ -19,7 +19,7 @@
 // USA.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 936 }
+// { dg-error "no matching" "" { target *-*-* } 974 }
 // { dg-excess-errors "" }
 
 #include <vector>
diff --git a/libstdc++-v3/testsuite/ext/vstring/requirements/citerators.cc b/libstdc++-v3/testsuite/ext/vstring/requirements/citerators.cc
new file mode 100644 (file)
index 0000000..3e579e8
--- /dev/null
@@ -0,0 +1,53 @@
+// { dg-options "-std=gnu++0x" }
+
+// 2007-10-15  Paolo Carlini  <pcarlini@suse.de>
+
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#include <ext/vstring.h>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  __gnu_cxx::__vstring v(7, 'a');
+  VERIFY( v.cbegin() == v.begin() );
+  VERIFY( v.cend() == v.end() );
+  VERIFY( v.crbegin() == v.rbegin() );
+  VERIFY( v.crend() == v.rend() );
+  VERIFY( v.cbegin() != v.cend() );
+  VERIFY( v.crbegin() != v.crend() );  
+}
+
+int main()
+{
+  test01();
+  return 0;
+}