]> gcc.gnu.org Git - gcc.git/commitdiff
libstdc++: Implement P2432R1 changes for views::istream
authorPatrick Palka <ppalka@redhat.com>
Thu, 21 Oct 2021 15:55:19 +0000 (11:55 -0400)
committerPatrick Palka <ppalka@redhat.com>
Thu, 21 Oct 2021 15:55:19 +0000 (11:55 -0400)
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.

libstdc++-v3/include/std/ranges
libstdc++-v3/testsuite/std/ranges/istream_view.cc

index d6bb78c09f91e4bdd816203f7b7e27a2f1e6ea22..7521cd675b3655bcee0d97c04618a975bcfd4c3f 100644 (file)
@@ -782,10 +782,27 @@ namespace views
       friend _Iterator;
     };
 
-  template<typename _Val, typename _CharT, typename _Traits>
-    basic_istream_view<_Val, _CharT, _Traits>
-    istream_view(basic_istream<_CharT, _Traits>& __s)
-    { return basic_istream_view<_Val, _CharT, _Traits>{__s}; }
+  template<typename _Val>
+    using istream_view = basic_istream_view<_Val, char>;
+
+  template<typename _Val>
+    using wistream_view = basic_istream_view<_Val, wchar_t>;
+
+namespace views
+{
+  template<typename _Tp>
+    struct _Istream
+    {
+      template<typename _CharT, typename _Traits>
+       [[nodiscard]]
+       constexpr auto
+       operator()(basic_istream<_CharT, _Traits>& __e) const
+       { return basic_istream_view<_Tp, _CharT, _Traits>(__e); }
+    };
+
+  template<typename _Tp>
+    inline constexpr _Istream<_Tp> istream;
+}
 
   // C++20 24.7 [range.adaptors] Range adaptors
 
index f5c0c2a6bb01bf92b5bf25bad140a2124be8491f..ea7c5a35ef77a4186c60afad806582ad3214aa6c 100644 (file)
@@ -103,6 +103,18 @@ test06()
   static_assert( std::is_same_v<V, W> );
 }
 
+void
+test07()
+{
+  // P2432R1, views::istream
+  auto nums = std::istringstream("0 1 2 3 4");
+  ranges::istream_view<int> v(nums);
+  int sum = 0;
+  for (int val : views::istream<int>(nums))
+    sum += val;
+  VERIFY( sum == 10 );
+}
+
 int
 main()
 {
@@ -112,4 +124,5 @@ main()
   test04();
   test05();
   test06();
+  test07();
 }
This page took 0.067023 seconds and 5 git commands to generate.