From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1888) id 3F90B385780B; Thu, 21 Oct 2021 15:57:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3F90B385780B MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Patrick Palka To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc r12-4615] libstdc++: Implement P2432R1 changes for views::istream X-Act-Checkin: gcc X-Git-Author: Patrick Palka X-Git-Refname: refs/heads/master X-Git-Oldrev: 9626e44713ac4bd3c8a04ae7e62a77fae7b771e0 X-Git-Newrev: 48154969d4b2e530af68ae9cd4277facf9d3f1a2 Message-Id: <20211021155757.3F90B385780B@sourceware.org> Date: Thu, 21 Oct 2021 15:57:57 +0000 (GMT) X-BeenThere: libstdc++-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Oct 2021 15:57:57 -0000 https://gcc.gnu.org/g:48154969d4b2e530af68ae9cd4277facf9d3f1a2 commit r12-4615-g48154969d4b2e530af68ae9cd4277facf9d3f1a2 Author: Patrick Palka Date: Thu Oct 21 11:55:19 2021 -0400 libstdc++: Implement P2432R1 changes for views::istream libstdc++-v3/ChangeLog: * include/std/ranges (istream_view): Replace this function template with an alias template as per P2432R1. (wistream_view): Define as per P2432R1. (views::_Istream, views::istream): Likewise. * testsuite/std/ranges/istream_view.cc (test07): New test. Diff: --- libstdc++-v3/include/std/ranges | 25 +++++++++++++++++++---- libstdc++-v3/testsuite/std/ranges/istream_view.cc | 13 ++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index d6bb78c09f9..7521cd675b3 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -782,10 +782,27 @@ namespace views friend _Iterator; }; - template - basic_istream_view<_Val, _CharT, _Traits> - istream_view(basic_istream<_CharT, _Traits>& __s) - { return basic_istream_view<_Val, _CharT, _Traits>{__s}; } + template + using istream_view = basic_istream_view<_Val, char>; + + template + using wistream_view = basic_istream_view<_Val, wchar_t>; + +namespace views +{ + template + struct _Istream + { + template + [[nodiscard]] + constexpr auto + operator()(basic_istream<_CharT, _Traits>& __e) const + { return basic_istream_view<_Tp, _CharT, _Traits>(__e); } + }; + + template + inline constexpr _Istream<_Tp> istream; +} // C++20 24.7 [range.adaptors] Range adaptors diff --git a/libstdc++-v3/testsuite/std/ranges/istream_view.cc b/libstdc++-v3/testsuite/std/ranges/istream_view.cc index f5c0c2a6bb0..ea7c5a35ef7 100644 --- a/libstdc++-v3/testsuite/std/ranges/istream_view.cc +++ b/libstdc++-v3/testsuite/std/ranges/istream_view.cc @@ -103,6 +103,18 @@ test06() static_assert( std::is_same_v ); } +void +test07() +{ + // P2432R1, views::istream + auto nums = std::istringstream("0 1 2 3 4"); + ranges::istream_view v(nums); + int sum = 0; + for (int val : views::istream(nums)) + sum += val; + VERIFY( sum == 10 ); +} + int main() { @@ -112,4 +124,5 @@ main() test04(); test05(); test06(); + test07(); }