Skip to content

Commit 444f19f

Browse files
Test constraints on const_iterator/const_sentinel (LWG3765)
1 parent 3e932f4 commit 444f19f

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

libcxx/test/std/iterators/const.iterators/alias.pass.cpp renamed to libcxx/test/std/iterators/const.iterators/alias.compile.pass.cpp

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,34 @@
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+
1839
ASSERT_SAME_TYPE(std::const_iterator<int*>, std::basic_const_iterator<int*>);
1940
ASSERT_SAME_TYPE(std::const_iterator<const int*>, const int*);
2041
ASSERT_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
2849
ASSERT_SAME_TYPE(std::const_iterator<list_const_iterator>, list_const_iterator);
2950
ASSERT_SAME_TYPE(std::const_sentinel<list_iterator>, std::basic_const_iterator<list_iterator>);
3051
ASSERT_SAME_TYPE(std::const_sentinel<list_const_iterator>, list_const_iterator);
31-
32-
int main() { return 0; }

0 commit comments

Comments
 (0)