+2017-11-20 Ville Voutilainen <ville.voutilainen@gmail.com>
+
+ Implement LWG 2353
+ * include/bits/stl_iterator_base_funcs.h (next):
+ Use InputIterator instead of ForwardIterator.
+ * testsuite/24_iterators/operations/lwg2353.cc: New.
+ * testsuite/24_iterators/operations/next_neg.cc: Remove.
+
2017-11-18 Edward Smith-Rowland <3dw4rd@verizon.net>
PR libstdc++/pr66689 - comp_ellint_3 and ellint_3 return garbage values
#if __cplusplus >= 201103L
- template<typename _ForwardIterator>
- inline _GLIBCXX17_CONSTEXPR _ForwardIterator
- next(_ForwardIterator __x, typename
- iterator_traits<_ForwardIterator>::difference_type __n = 1)
+ template<typename _InputIterator>
+ inline _GLIBCXX17_CONSTEXPR _InputIterator
+ next(_InputIterator __x, typename
+ iterator_traits<_InputIterator>::difference_type __n = 1)
{
// concept requirements
- __glibcxx_function_requires(_ForwardIteratorConcept<
- _ForwardIterator>)
+ __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
std::advance(__x, __n);
return __x;
}
--- /dev/null
+// { dg-options "-D_GLIBCXX_CONCEPT_CHECKS" }
+// { dg-do run { target c++11 } }
+
+#include <iterator>
+#include <utility>
+#include <sstream>
+#include <string>
+#include <testsuite_hooks.h>
+
+template<typename Distance, typename InputRange>
+std::pair<std::istream_iterator<char>, std::istream_iterator<char>>
+drop(Distance n, InputRange& rng)
+{
+ return std::make_pair(std::next(std::istream_iterator<char>(rng), n),
+ std::istream_iterator<char>()
+ );
+}
+
+int main()
+{
+ std::stringstream x("let let there be rock");
+ x << std::noskipws;
+ auto y = drop(4, x);
+ std::string z(y.first, y.second);
+ VERIFY(z == "let there be rock");
+}
+++ /dev/null
-// Copyright (C) 2015-2017 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 3, 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 COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-// { dg-options "-D_GLIBCXX_CONCEPT_CHECKS" }
-// { dg-do compile { target c++11 } }
-
-#include <iterator>
-
-struct X {};
-
-namespace std
-{
- template<>
- struct iterator_traits<const X*> : iterator_traits<X*>
- {
- using iterator_category = input_iterator_tag;
- using reference = const X&;
- using pointer = const X*;
- };
-}
-
-void
-test01()
-{
- const X array[1] = { };
- std::next(array);
- // { dg-error "input_iterator" "" { target *-*-* } 220 }
-}