@@ -62,57 +62,57 @@ constexpr bool test() {
62
62
static_assert (!std::is_invocable_v<decltype (std::ranges::distance), const R&>);
63
63
static_assert (!std::is_invocable_v<decltype (std::ranges::distance), const R&&>);
64
64
}
65
- // {
66
- // // Sized range (unsized sentinel type), non-copyable iterator type, rvalue-ref-qualified begin()
67
- // using It = cpp20_input_iterator<int*>;
68
- // using Sent = sentinel_wrapper<cpp20_input_iterator<int*>>;
69
- // using R = std::ranges::subrange<It, Sent, std::ranges::subrange_kind::sized>;
65
+ {
66
+ // Sized range (unsized sentinel type), non-copyable iterator type, rvalue-ref-qualified begin()
67
+ using It = cpp20_input_iterator<int *>;
68
+ using Sent = sentinel_wrapper<cpp20_input_iterator<int *>>;
69
+ using R = std::ranges::subrange<It, Sent, std::ranges::subrange_kind::sized>;
70
70
71
- // int a[] = {1, 2, 3};
72
- // {
73
- // auto r = R(It(a), Sent(It(a + 3)), 3);
74
- // assert(std::ranges::distance(r) == 3);
75
- // }
76
- // {
77
- // auto r = R(It(a), Sent(It(a + 3)), 3);
78
- // assert(std::ranges::distance(static_cast<R&&>(r)) == 3);
79
- // }
80
- // static_assert(!std::is_invocable_v<decltype(std::ranges::distance), const R&>);
81
- // static_assert(!std::is_invocable_v<decltype(std::ranges::distance), const R&&>);
82
- // }
83
- // {
84
- // // Sized range (sized sentinel type), non-copyable iterator type
85
- // test_ordinary<cpp20_input_iterator<int*>, sized_sentinel<cpp20_input_iterator<int*>>>();
86
- // }
87
- // test_ordinary<cpp17_input_iterator<int*>, sentinel_wrapper<cpp17_input_iterator<int*>>>();
88
- // test_ordinary<cpp20_input_iterator<int*>, sentinel_wrapper<cpp20_input_iterator<int*>>>();
89
- // test_ordinary<cpp17_output_iterator<int*>, sentinel_wrapper<cpp17_output_iterator<int*>>>();
90
- // test_ordinary<forward_iterator<int*>, sentinel_wrapper<forward_iterator<int*>>>();
91
- // test_ordinary<bidirectional_iterator<int*>, sentinel_wrapper<bidirectional_iterator<int*>>>();
92
- // test_ordinary<random_access_iterator<int*>, sentinel_wrapper<random_access_iterator<int*>>>();
93
- // test_ordinary<contiguous_iterator<int*>, sentinel_wrapper<contiguous_iterator<int*>>>();
94
- // test_ordinary<int*, sentinel_wrapper<int*>>();
71
+ int a[] = {1 , 2 , 3 };
72
+ {
73
+ auto r = R (It (a), Sent (It (a + 3 )), 3 );
74
+ assert (std::ranges::distance (r) == 3 );
75
+ }
76
+ {
77
+ auto r = R (It (a), Sent (It (a + 3 )), 3 );
78
+ assert (std::ranges::distance (static_cast <R&&>(r)) == 3 );
79
+ }
80
+ static_assert (!std::is_invocable_v<decltype (std::ranges::distance), const R&>);
81
+ static_assert (!std::is_invocable_v<decltype (std::ranges::distance), const R&&>);
82
+ }
83
+ {
84
+ // Sized range (sized sentinel type), non-copyable iterator type
85
+ test_ordinary<cpp20_input_iterator<int *>, sized_sentinel<cpp20_input_iterator<int *>>>();
86
+ }
87
+ test_ordinary<cpp17_input_iterator<int *>, sentinel_wrapper<cpp17_input_iterator<int *>>>();
88
+ test_ordinary<cpp20_input_iterator<int *>, sentinel_wrapper<cpp20_input_iterator<int *>>>();
89
+ test_ordinary<cpp17_output_iterator<int *>, sentinel_wrapper<cpp17_output_iterator<int *>>>();
90
+ test_ordinary<forward_iterator<int *>, sentinel_wrapper<forward_iterator<int *>>>();
91
+ test_ordinary<bidirectional_iterator<int *>, sentinel_wrapper<bidirectional_iterator<int *>>>();
92
+ test_ordinary<random_access_iterator<int *>, sentinel_wrapper<random_access_iterator<int *>>>();
93
+ test_ordinary<contiguous_iterator<int *>, sentinel_wrapper<contiguous_iterator<int *>>>();
94
+ test_ordinary<int *, sentinel_wrapper<int *>>();
95
95
96
- // test_ordinary<cpp17_input_iterator<int*>, sized_sentinel<cpp17_input_iterator<int*>>>();
97
- // test_ordinary<cpp20_input_iterator<int*>, sized_sentinel<cpp20_input_iterator<int*>>>();
98
- // test_ordinary<cpp17_output_iterator<int*>, sized_sentinel<cpp17_output_iterator<int*>>>();
99
- // test_ordinary<forward_iterator<int*>, sized_sentinel<forward_iterator<int*>>>();
100
- // test_ordinary<bidirectional_iterator<int*>, sized_sentinel<bidirectional_iterator<int*>>>();
101
- // test_ordinary<random_access_iterator<int*>, sized_sentinel<random_access_iterator<int*>>>();
102
- // test_ordinary<contiguous_iterator<int*>, sized_sentinel<contiguous_iterator<int*>>>();
103
- // test_ordinary<int*, sized_sentinel<int*>>();
104
- // test_ordinary<int*, int*>();
96
+ test_ordinary<cpp17_input_iterator<int *>, sized_sentinel<cpp17_input_iterator<int *>>>();
97
+ test_ordinary<cpp20_input_iterator<int *>, sized_sentinel<cpp20_input_iterator<int *>>>();
98
+ test_ordinary<cpp17_output_iterator<int *>, sized_sentinel<cpp17_output_iterator<int *>>>();
99
+ test_ordinary<forward_iterator<int *>, sized_sentinel<forward_iterator<int *>>>();
100
+ test_ordinary<bidirectional_iterator<int *>, sized_sentinel<bidirectional_iterator<int *>>>();
101
+ test_ordinary<random_access_iterator<int *>, sized_sentinel<random_access_iterator<int *>>>();
102
+ test_ordinary<contiguous_iterator<int *>, sized_sentinel<contiguous_iterator<int *>>>();
103
+ test_ordinary<int *, sized_sentinel<int *>>();
104
+ test_ordinary<int *, int *>();
105
105
106
- // // Calling it on a non-range isn't allowed.
107
- // static_assert(!std::is_invocable_v<decltype(std::ranges::distance), int>);
108
- // static_assert(!std::is_invocable_v<decltype(std::ranges::distance), int*>);
106
+ // Calling it on a non-range isn't allowed.
107
+ static_assert (!std::is_invocable_v<decltype (std::ranges::distance), int >);
108
+ static_assert (!std::is_invocable_v<decltype (std::ranges::distance), int *>);
109
109
110
110
return true ;
111
111
}
112
112
113
113
int main (int , char **) {
114
114
test ();
115
- // static_assert(test());
115
+ static_assert (test ());
116
116
117
117
return 0 ;
118
118
}
0 commit comments