1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
10 
11 // <ranges>
12 
13 // std::ranges::chunk_by_view<V>::<iterator>() = default;
14 
15 #include <ranges>
16 
17 #include <cassert>
18 #include <functional>
19 #include <type_traits>
20 #include <utility>
21 
22 #include "../types.h"
23 #include "test_iterators.h"
24 
25 template <class Iterator, bool IsNoexcept>
testDefaultConstructible()26 constexpr void testDefaultConstructible() {
27   // Make sure the iterator is default constructible.
28   using ChunkByView     = std::ranges::chunk_by_view<View<Iterator>, std::ranges::less_equal>;
29   using ChunkByIterator = std::ranges::iterator_t<ChunkByView>;
30   ChunkByIterator i{};
31   ChunkByIterator j;
32   assert(i == j);
33   static_assert(noexcept(ChunkByIterator{}) == IsNoexcept);
34 }
35 
tests()36 constexpr bool tests() {
37   testDefaultConstructible<forward_iterator<int*>, /*IsNoexcept=*/false>();
38   testDefaultConstructible<bidirectional_iterator<int*>, /*IsNoexcept=*/false>();
39   testDefaultConstructible<random_access_iterator<int*>, /*IsNoexcept=*/false>();
40   testDefaultConstructible<contiguous_iterator<int*>, /*IsNoexcept=*/false>();
41   testDefaultConstructible<int*, /*IsNoexcept=*/true>();
42   return true;
43 }
44 
main(int,char **)45 int main(int, char**) {
46   tests();
47   static_assert(tests());
48 
49   return 0;
50 }
51