2015-05-20 François Dumont <fdumont@gcc.gnu.org>
authorFrançois Dumont <fdumont@gcc.gnu.org>
Wed, 20 May 2015 19:02:22 +0000 (19:02 +0000)
committerFrançois Dumont <fdumont@gcc.gnu.org>
Wed, 20 May 2015 19:02:22 +0000 (19:02 +0000)
* include/bits/cpp_type_traits.h
(std::move_iterator): Delete declaration.
(std::__is_move_iterator<move_iterator>): Move partial specialization...
* include/bits/stl_iterator.h: ... here.
(std::__miter_base): Overloads for std::reverse_iterator and
std::move_iterator.
* include/bits/stl_algobase.h (std::__miter_base): Provide default
implementation.

From-SVN: r223453

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/cpp_type_traits.h
libstdc++-v3/include/bits/stl_algobase.h
libstdc++-v3/include/bits/stl_iterator.h

index ce5573c473b3b5107f9aa5f966624e37886e48e9..773c1dd62f8c236387d00e0921bd32f684215943 100644 (file)
@@ -1,3 +1,14 @@
+2015-05-20  François Dumont  <fdumont@gcc.gnu.org>
+
+       * include/bits/cpp_type_traits.h
+       (std::move_iterator): Delete declaration.
+       (std::__is_move_iterator<move_iterator>): Move partial specialization...
+       * include/bits/stl_iterator.h: ... here.
+       (std::__miter_base): Overloads for std::reverse_iterator and
+       std::move_iterator.
+       * include/bits/stl_algobase.h (std::__miter_base): Provide default
+       implementation.
+
 2015-05-20  Jonathan Wakely  <jwakely@redhat.com>
 
        * testsuite/util/testsuite_fs.h (nonexistent_path): Don't use tempnam.
index 21429175c05bef07c18800367cdfb285febe77ca..f7b76bf8b5134cd17a2631b73f8e9641c86fd8af 100644 (file)
@@ -399,18 +399,6 @@ __INT_N(__GLIBCXX_TYPE_INT_N_3)
       typedef __false_type __type;
     };
 
-#if __cplusplus >= 201103L
-  template<typename _Iterator>
-    class move_iterator;
-
-  template<typename _Iterator>
-    struct __is_move_iterator< move_iterator<_Iterator> >
-    {
-      enum { __value = 1 };
-      typedef __true_type __type;
-    };
-#endif
-
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace
 
index 630b3a04fc23341073705afc931e83972cf2502d..409ef364da50e0e8936d749019d878ed365d651f 100644 (file)
@@ -277,17 +277,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     __niter_base(_Iterator __it)
     { return __it; }
 
-  // If _Iterator is a move_iterator return its base otherwise return it
-  // untouched.  See copy, fill, ...
+  // Likewise for move_iterator.
   template<typename _Iterator>
-    struct _Miter_base
-    : _Iter_base<_Iterator, __is_move_iterator<_Iterator>::__value>
-    { };
-
-  template<typename _Iterator>
-    inline typename _Miter_base<_Iterator>::iterator_type
+    inline _Iterator
     __miter_base(_Iterator __it)
-    { return std::_Miter_base<_Iterator>::_S_base(__it); }
+    { return __it; }
 
   // All of these auxiliary structs serve two purposes.  (1) Replace
   // calls to copy with memmove whenever possible.  (Memmove, not memcpy,
index b8e79dfa7e4e0846540560eacb43f586e33df38e..58b9aabf2e605f0e43d7e82c7a16f563f17a8177 100644 (file)
@@ -414,6 +414,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     __niter_base(reverse_iterator<_Iterator> __it)
     -> decltype(__make_reverse_iterator(__niter_base(__it.base())))
     { return __make_reverse_iterator(__niter_base(__it.base())); }
+
+  template<typename _Iterator>
+    struct __is_move_iterator<reverse_iterator<_Iterator> >
+      : __is_move_iterator<_Iterator>
+    { };
+
+  template<typename _Iterator>
+    auto
+    __miter_base(reverse_iterator<_Iterator> __it)
+    -> decltype(__make_reverse_iterator(__miter_base(__it.base())))
+    { return __make_reverse_iterator(__miter_base(__it.base())); }
 #endif
 
   // 24.4.2.2.1 back_insert_iterator
@@ -1211,6 +1222,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     -> decltype(make_move_iterator(__niter_base(__it.base())))
     { return make_move_iterator(__niter_base(__it.base())); }
 
+  template<typename _Iterator>
+    struct __is_move_iterator<move_iterator<_Iterator> >
+    {
+      enum { __value = 1 };
+      typedef __true_type __type;
+    };
+
+  template<typename _Iterator>
+    auto
+    __miter_base(move_iterator<_Iterator> __it)
+    -> decltype(__miter_base(__it.base()))
+    { return __miter_base(__it.base()); }
+
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace