From: Patrick Palka Date: Thu, 21 Oct 2021 15:55:19 +0000 (-0400) Subject: libstdc++: Implement P2432R1 changes for views::istream X-Git-Tag: basepoints/gcc-13~3698 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=48154969d4b2e530af68ae9cd4277facf9d3f1a2;p=thirdparty%2Fgcc.git 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 --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index d6bb78c09f91..7521cd675b36 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 f5c0c2a6bb01..ea7c5a35ef77 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(); }