88
99// REQUIRES: std-at-least-c++23
1010
11- // std::const_iterator
11+ // template<input_iterator I>
12+ // using const_iterator = see below;
13+ // template<semiregular S>
14+ // using const_sentinel = see below;
1215
1316#include < iterator>
1417#include < list>
1518#include < ranges>
1619#include " test_macros.h"
1720
21+ template <class T >
22+ concept UsableForConstIterator = requires { typename std::const_iterator<T>; };
23+
24+ static_assert (UsableForConstIterator<int *>);
25+ static_assert (UsableForConstIterator<const int *>);
26+ static_assert (!UsableForConstIterator<int >);
27+ static_assert (!UsableForConstIterator<int &>);
28+ static_assert (!UsableForConstIterator<void >);
29+
30+ template <class T >
31+ concept UsableForConstSentinel = requires { typename std::const_sentinel<T>; };
32+
33+ static_assert (UsableForConstSentinel<int *>);
34+ static_assert (UsableForConstSentinel<const int *>);
35+ static_assert (UsableForConstSentinel<int >);
36+ static_assert (!UsableForConstSentinel<int &>);
37+ static_assert (!UsableForConstSentinel<void >);
38+
1839ASSERT_SAME_TYPE (std::const_iterator<int *>, std::basic_const_iterator<int *>);
1940ASSERT_SAME_TYPE (std::const_iterator<const int *>, const int *);
2041ASSERT_SAME_TYPE (std::const_sentinel<int *>, std::basic_const_iterator<int *>);
@@ -28,5 +49,3 @@ ASSERT_SAME_TYPE(std::const_iterator<list_iterator>, std::basic_const_iterator<l
2849ASSERT_SAME_TYPE (std::const_iterator<list_const_iterator>, list_const_iterator);
2950ASSERT_SAME_TYPE (std::const_sentinel<list_iterator>, std::basic_const_iterator<list_iterator>);
3051ASSERT_SAME_TYPE (std::const_sentinel<list_const_iterator>, list_const_iterator);
31-
32- int main () { return 0 ; }
0 commit comments