libstdc++: Add ranges_size_t and rename all_view (LWG 3335)
authorJonathan Wakely <jwakely@redhat.com>
Wed, 19 Feb 2020 12:30:10 +0000 (12:30 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Wed, 19 Feb 2020 12:46:57 +0000 (12:46 +0000)
* include/bits/range_access.h (range_size_t): Define alias template.
* include/std/ranges (all_view): Rename to views::all_t (LWG 3335).
* testsuite/std/ranges/adaptors/filter.cc: Adjust to new name.

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/range_access.h
libstdc++-v3/include/std/ranges
libstdc++-v3/testsuite/std/ranges/adaptors/filter.cc

index 9ccba4345d501f6346a23ecba3fbb76321c359e5..f01b78da1180f4ec71815df41b32ca26dcbe6c81 100644 (file)
@@ -1,5 +1,9 @@
 2020-02-19  Jonathan Wakely  <jwakely@redhat.com>
 
+       * include/bits/range_access.h (range_size_t): Define alias template.
+       * include/std/ranges (all_view): Rename to views::all_t (LWG 3335).
+       * testsuite/std/ranges/adaptors/filter.cc: Adjust to new name.
+
        * include/std/ranges (filter_view, transform_view, take_view)
        (join_view, split_view, reverse_view): Remove commented-out converting
        constructors (LWG 3280).
index e2a2c28c7d23fc8842b6197846eb45d11f1e4801..e7a19305d2359c35afeddaa577df67775f948229 100644 (file)
@@ -905,6 +905,9 @@ namespace ranges
     concept sized_range = range<_Tp>
       && requires(_Tp& __t) { ranges::size(__t); };
 
+  template<sized_range _Range>
+    using range_size_t = decltype(ranges::size(std::declval<_Range&>()));
+
   // [range.refinements]
 
   /// A range for which ranges::begin returns an output iterator.
index cf4c19ffaabdcba43ac6066e6b58e8112f35fe2c..b0806750a082e4d1efee3f6832cce2d576b18d29 100644 (file)
@@ -1236,10 +1236,11 @@ namespace views
        else
          return subrange{std::forward<_Range>(__r)};
       };
-  } // namespace views
 
-  template<viewable_range _Range>
-    using all_view = decltype(views::all(declval<_Range>()));
+    template<viewable_range _Range>
+      using all_t = decltype(all(std::declval<_Range>()));
+
+  } // namespace views
 
   // XXX: the following algos are copied from ranges_algo.h to avoid a circular
   // dependency with that header.
@@ -1503,7 +1504,7 @@ namespace views
     };
 
   template<typename _Range, typename _Pred>
-    filter_view(_Range&&, _Pred) -> filter_view<all_view<_Range>, _Pred>;
+    filter_view(_Range&&, _Pred) -> filter_view<views::all_t<_Range>, _Pred>;
 
   namespace views
   {
@@ -1836,7 +1837,7 @@ namespace views
     };
 
   template<typename _Range, typename _Fp>
-    transform_view(_Range&&, _Fp) -> transform_view<all_view<_Range>, _Fp>;
+    transform_view(_Range&&, _Fp) -> transform_view<views::all_t<_Range>, _Fp>;
 
   namespace views
   {
@@ -1974,7 +1975,7 @@ namespace views
 
   template<range _Range>
     take_view(_Range&&, range_difference_t<_Range>)
-      -> take_view<all_view<_Range>>;
+      -> take_view<views::all_t<_Range>>;
 
   namespace views
   {
@@ -2066,7 +2067,7 @@ namespace views
 
   template<typename _Range, typename _Pred>
     take_while_view(_Range&&, _Pred)
-      -> take_while_view<all_view<_Range>, _Pred>;
+      -> take_while_view<views::all_t<_Range>, _Pred>;
 
   namespace views
   {
@@ -2143,7 +2144,7 @@ namespace views
 
   template<typename _Range>
     drop_view(_Range&&, range_difference_t<_Range>)
-      -> drop_view<all_view<_Range>>;
+      -> drop_view<views::all_t<_Range>>;
 
   namespace views
   {
@@ -2199,7 +2200,7 @@ namespace views
 
   template<typename _Range, typename _Pred>
     drop_while_view(_Range&&, _Pred)
-      -> drop_while_view<all_view<_Range>, _Pred>;
+      -> drop_while_view<views::all_t<_Range>, _Pred>;
 
   namespace views
   {
@@ -2450,7 +2451,7 @@ namespace views
       // XXX: _M_inner is "present only when !is_reference_v<_InnerRange>"
       [[no_unique_address]]
        conditional_t<!is_reference_v<_InnerRange>,
-                     all_view<_InnerRange>, __detail::_Empty> _M_inner;
+                     views::all_t<_InnerRange>, __detail::_Empty> _M_inner;
 
     public:
       join_view() = default;
@@ -2514,7 +2515,7 @@ namespace views
     };
 
   template<typename _Range>
-    explicit join_view(_Range&&) -> join_view<all_view<_Range>>;
+    explicit join_view(_Range&&) -> join_view<views::all_t<_Range>>;
 
   namespace views
   {
@@ -2838,7 +2839,7 @@ namespace views
       { }
 
       template<input_range _Range>
-       requires constructible_from<_Vp, all_view<_Range>>
+       requires constructible_from<_Vp, views::all_t<_Range>>
          && constructible_from<_Pattern, single_view<range_value_t<_Range>>>
        constexpr
        split_view(_Range&& __r, range_value_t<_Range> __e)
@@ -2893,11 +2894,11 @@ namespace views
 
   template<typename _Range, typename _Pred>
     split_view(_Range&&, _Pred&&)
-      -> split_view<all_view<_Range>, all_view<_Pred>>;
+      -> split_view<views::all_t<_Range>, views::all_t<_Pred>>;
 
   template<input_range _Range>
     split_view(_Range&&, range_value_t<_Range>)
-      -> split_view<all_view<_Range>, single_view<range_value_t<_Range>>>;
+      -> split_view<views::all_t<_Range>, single_view<range_value_t<_Range>>>;
 
   namespace views
   {
@@ -2945,7 +2946,7 @@ namespace views
       /* XXX: LWG 3280 didn't remove this constructor, but I think it should?
       template<viewable_range _Range>
        requires (!common_range<_Range>)
-         && constructible_from<_Vp, all_view<_Range>>
+         && constructible_from<_Vp, views::all_t<_Range>>
        constexpr explicit
        common_view(_Range&& __r)
          : _M_base(views::all(std::forward<_Range>(__r)))
@@ -3010,7 +3011,7 @@ namespace views
     };
 
   template<typename _Range>
-    common_view(_Range&&) -> common_view<all_view<_Range>>;
+    common_view(_Range&&) -> common_view<views::all_t<_Range>>;
 
   namespace views
   {
@@ -3083,7 +3084,7 @@ namespace views
     };
 
   template<typename _Range>
-    reverse_view(_Range&&) -> reverse_view<all_view<_Range>>;
+    reverse_view(_Range&&) -> reverse_view<views::all_t<_Range>>;
 
   namespace views
   {
@@ -3356,10 +3357,10 @@ namespace views
     };
 
   template<typename _Range>
-    using keys_view = elements_view<all_view<_Range>, 0>;
+    using keys_view = elements_view<views::all_t<_Range>, 0>;
 
   template<typename _Range>
-    using values_view = elements_view<all_view<_Range>, 1>;
+    using values_view = elements_view<views::all_t<_Range>, 1>;
 
   namespace views
   {
@@ -3367,7 +3368,8 @@ namespace views
     inline constexpr __adaptor::_RangeAdaptorClosure elements
       = [] <viewable_range _Range> (_Range&& __r)
       {
-       return elements_view<all_view<_Range>, _Nm>{std::forward<_Range>(__r)};
+       using _El = elements_view<views::all_t<_Range>, _Nm>;
+       return _El{std::forward<_Range>(__r)};
       };
 
     inline constexpr __adaptor::_RangeAdaptorClosure keys = elements<0>;
index 4edbf0b657da5317ea4775bd71cf4c77a0ac2686..4e41232cd5ce599dc2c852805c2a15d43176847d 100644 (file)
@@ -43,7 +43,7 @@ test01()
   static_assert(!ranges::sized_range<R>);
   static_assert(ranges::bidirectional_range<R>);
   static_assert(!ranges::random_access_range<R>);
-  static_assert(ranges::range<ranges::all_view<R>>);
+  static_assert(ranges::range<views::all_t<R>>);
   VERIFY( ranges::equal(v, (int[]){1,3,5}) );
   VERIFY( ranges::equal(v | views::reverse, (int[]){5,3,1}) );
   VERIFY( v.pred()(3) == true );