From 7b7b60c83047db2e4bde9e7f40ce3f1738694789 Mon Sep 17 00:00:00 2001 From: Ville Voutilainen Date: Mon, 20 Nov 2017 16:21:42 +0200 Subject: [PATCH] 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. From-SVN: r254957 --- libstdc++-v3/ChangeLog | 8 ++++ .../include/bits/stl_iterator_base_funcs.h | 11 +++-- .../24_iterators/operations/lwg2353.cc | 26 ++++++++++++ .../24_iterators/operations/next_neg.cc | 42 ------------------- 4 files changed, 39 insertions(+), 48 deletions(-) create mode 100644 libstdc++-v3/testsuite/24_iterators/operations/lwg2353.cc delete mode 100644 libstdc++-v3/testsuite/24_iterators/operations/next_neg.cc diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 15936ac1d86..bdb7de2fe8e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2017-11-20 Ville Voutilainen + + 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 diff --git a/libstdc++-v3/include/bits/stl_iterator_base_funcs.h b/libstdc++-v3/include/bits/stl_iterator_base_funcs.h index 86a93d34fa1..ad84b398c84 100644 --- a/libstdc++-v3/include/bits/stl_iterator_base_funcs.h +++ b/libstdc++-v3/include/bits/stl_iterator_base_funcs.h @@ -208,14 +208,13 @@ _GLIBCXX_END_NAMESPACE_CONTAINER #if __cplusplus >= 201103L - template - inline _GLIBCXX17_CONSTEXPR _ForwardIterator - next(_ForwardIterator __x, typename - iterator_traits<_ForwardIterator>::difference_type __n = 1) + template + 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; } diff --git a/libstdc++-v3/testsuite/24_iterators/operations/lwg2353.cc b/libstdc++-v3/testsuite/24_iterators/operations/lwg2353.cc new file mode 100644 index 00000000000..13b058bab7f --- /dev/null +++ b/libstdc++-v3/testsuite/24_iterators/operations/lwg2353.cc @@ -0,0 +1,26 @@ +// { dg-options "-D_GLIBCXX_CONCEPT_CHECKS" } +// { dg-do run { target c++11 } } + +#include +#include +#include +#include +#include + +template +std::pair, std::istream_iterator> +drop(Distance n, InputRange& rng) +{ + return std::make_pair(std::next(std::istream_iterator(rng), n), + std::istream_iterator() + ); +} + +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"); +} diff --git a/libstdc++-v3/testsuite/24_iterators/operations/next_neg.cc b/libstdc++-v3/testsuite/24_iterators/operations/next_neg.cc deleted file mode 100644 index f3c20a19567..00000000000 --- a/libstdc++-v3/testsuite/24_iterators/operations/next_neg.cc +++ /dev/null @@ -1,42 +0,0 @@ -// 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 -// . - -// { dg-options "-D_GLIBCXX_CONCEPT_CHECKS" } -// { dg-do compile { target c++11 } } - -#include - -struct X {}; - -namespace std -{ - template<> - struct iterator_traits : iterator_traits - { - 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 } -} -- 2.30.2