Add std::copy_n istreambuf_iterator specialization
authorFrançois Dumont <fdumont@gcc.gnu.org>
Sun, 6 Oct 2019 15:53:51 +0000 (15:53 +0000)
committerFrançois Dumont <fdumont@gcc.gnu.org>
Sun, 6 Oct 2019 15:53:51 +0000 (15:53 +0000)
Commit this missing part which had been rejected.

From-SVN: r276640

libstdc++-v3/include/bits/stl_algo.h

index 187c732d30487580b5109547d089e08cb8e451a6..661db0264ea123a8f513afe24b513051c33eabb5 100644 (file)
@@ -778,8 +778,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   template<typename _InputIterator, typename _Size, typename _OutputIterator>
     _GLIBCXX20_CONSTEXPR
     _OutputIterator
-    __copy_n(_InputIterator __first, _Size __n,
-            _OutputIterator __result, input_iterator_tag)
+    __copy_n_a(_InputIterator __first, _Size __n, _OutputIterator __result)
     {
       if (__n > 0)
        {
@@ -795,6 +794,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        }
       return __result;
     }
+  template<typename _CharT, typename _Size>
+    __enable_if_t<__is_char<_CharT>::__value, _CharT*>
+    __copy_n_a(istreambuf_iterator<_CharT, char_traits<_CharT>>,
+              _Size, _CharT*);
+
+  template<typename _InputIterator, typename _Size, typename _OutputIterator>
+    _GLIBCXX20_CONSTEXPR
+    _OutputIterator
+    __copy_n(_InputIterator __first, _Size __n,
+            _OutputIterator __result, input_iterator_tag)
+    {
+      return std::__niter_wrap(__result,
+                              __copy_n_a(__first, __n,
+                                         std::__niter_base(__result)));
+    }
 
   template<typename _RandomAccessIterator, typename _Size,
           typename _OutputIterator>