@@ -62,57 +62,57 @@ constexpr bool test() {
6262 static_assert (!std::is_invocable_v<decltype (std::ranges::distance), const R&>);
6363 static_assert (!std::is_invocable_v<decltype (std::ranges::distance), const R&&>);
6464 }
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>;
7070
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 *>>();
9595
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 *>();
105105
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 *>);
109109
110110 return true ;
111111}
112112
113113int main (int , char **) {
114114 test ();
115- // static_assert(test());
115+ static_assert (test ());
116116
117117 return 0 ;
118118}
0 commit comments