|
9 | 9 | // UNSUPPORTED: c++03, c++11, c++14, c++17
|
10 | 10 |
|
11 | 11 | // constexpr counted_iterator& operator++();
|
12 |
| -// decltype(auto) operator++(int); |
| 12 | +// constexpr decltype(auto) operator++(int); |
13 | 13 | // constexpr counted_iterator operator++(int)
|
14 | 14 | // requires forward_iterator<I>;
|
15 | 15 |
|
@@ -62,6 +62,26 @@ concept PlusEnabled = requires(Iter& iter) {
|
62 | 62 | constexpr bool test() {
|
63 | 63 | int buffer[8] = {1, 2, 3, 4, 5, 6, 7, 8};
|
64 | 64 |
|
| 65 | + { |
| 66 | + using Counted = std::counted_iterator<InputOrOutputArchetype>; |
| 67 | + std::counted_iterator iter(InputOrOutputArchetype{buffer}, 8); |
| 68 | + |
| 69 | + iter++; |
| 70 | + assert((++iter).base().ptr == buffer + 2); |
| 71 | + |
| 72 | + ASSERT_SAME_TYPE(decltype(iter++), void); |
| 73 | + ASSERT_SAME_TYPE(decltype(++iter), Counted&); |
| 74 | + } |
| 75 | + { |
| 76 | + using Counted = std::counted_iterator<cpp20_input_iterator<int*>>; |
| 77 | + std::counted_iterator iter(cpp20_input_iterator<int*>{buffer}, 8); |
| 78 | + |
| 79 | + iter++; |
| 80 | + assert(++iter == Counted(cpp20_input_iterator<int*>{buffer + 2}, 6)); |
| 81 | + |
| 82 | + ASSERT_SAME_TYPE(decltype(iter++), void); |
| 83 | + ASSERT_SAME_TYPE(decltype(++iter), Counted&); |
| 84 | + } |
65 | 85 | {
|
66 | 86 | using Counted = std::counted_iterator<forward_iterator<int*>>;
|
67 | 87 | std::counted_iterator iter(forward_iterator<int*>{buffer}, 8);
|
@@ -95,29 +115,8 @@ int main(int, char**) {
|
95 | 115 | test();
|
96 | 116 | static_assert(test());
|
97 | 117 |
|
98 |
| - int buffer[8] = {1, 2, 3, 4, 5, 6, 7, 8}; |
99 |
| - |
100 |
| - { |
101 |
| - using Counted = std::counted_iterator<InputOrOutputArchetype>; |
102 |
| - std::counted_iterator iter(InputOrOutputArchetype{buffer}, 8); |
103 |
| - |
104 |
| - iter++; |
105 |
| - assert((++iter).base().ptr == buffer + 2); |
106 |
| - |
107 |
| - ASSERT_SAME_TYPE(decltype(iter++), void); |
108 |
| - ASSERT_SAME_TYPE(decltype(++iter), Counted&); |
109 |
| - } |
110 |
| - { |
111 |
| - using Counted = std::counted_iterator<cpp20_input_iterator<int*>>; |
112 |
| - std::counted_iterator iter(cpp20_input_iterator<int*>{buffer}, 8); |
113 |
| - |
114 |
| - iter++; |
115 |
| - assert(++iter == Counted(cpp20_input_iterator<int*>{buffer + 2}, 6)); |
116 |
| - |
117 |
| - ASSERT_SAME_TYPE(decltype(iter++), void); |
118 |
| - ASSERT_SAME_TYPE(decltype(++iter), Counted&); |
119 |
| - } |
120 | 118 | #ifndef TEST_HAS_NO_EXCEPTIONS
|
| 119 | + int buffer[8] = {1, 2, 3, 4, 5, 6, 7, 8}; |
121 | 120 | {
|
122 | 121 | using Counted = std::counted_iterator<ThrowsOnInc<int*>>;
|
123 | 122 | std::counted_iterator iter(ThrowsOnInc<int*>{buffer}, 8);
|
|
0 commit comments