]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/24_iterators/headers/iterator/synopsis_c++20.cc
tree-optimization/115597 - allow CSE of two-operator VEC_PERM nodes
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 24_iterators / headers / iterator / synopsis_c++20.cc
CommitLineData
a945c346 1// Copyright (C) 2019-2024 Free Software Foundation, Inc.
6d0dff49
JW
2//
3// This file is part of the GNU ISO C++ Library. This library is free
4// software; you can redistribute it and/or modify it under the
5// terms of the GNU General Public License as published by the
6// Free Software Foundation; either version 3, or (at your option)
7// any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13
14// You should have received a copy of the GNU General Public License along
15// with this library; see the file COPYING3. If not see
16// <http://www.gnu.org/licenses/>.
17
762baaf0 18// { dg-do compile { target c++20 } }
6d0dff49
JW
19// { dg-require-normal-namespace "" }
20
21#include <iterator>
22#include "./synopsis_c++17.cc"
23
24namespace std
25{
26 template<class> struct incrementable_traits;
27 template<class> struct readable_traits;
28
29 struct contiguous_iterator_tag;
30
31 namespace ranges
32 {
a49a045b
JW
33 // These are function objects of unspecified type.
34 auto& _distance = distance;
35 auto& _advance = advance;
36 auto& _next = next;
37 auto& _prev = prev;
6d0dff49
JW
38 }
39
40 template<semiregular S> class move_sentinel;
41
42 template<input_or_output_iterator I, sentinel_for<I> S>
1b425f3a 43 requires (!same_as<I, S>) && copyable<I>
6d0dff49
JW
44 class common_iterator;
45
46 template<class I, class S>
47 struct incrementable_traits<common_iterator<I, S>>;
48
49 template<input_iterator I, class S>
50 struct iterator_traits<common_iterator<I, S>>;
51
52 struct default_sentinel_t;
53
54 template<input_or_output_iterator I> class counted_iterator;
55
56 template<class I>
57 struct incrementable_traits<counted_iterator<I>>;
58
59 template<input_iterator I>
902b40c7 60 requires same_as<__detail::__iter_traits<I>, iterator_traits<I>>
6d0dff49
JW
61 struct iterator_traits<counted_iterator<I>>;
62
63 struct unreachable_sentinel_t;
64}
65
328b52d6 66struct I { };
d99828ee 67template<> constexpr bool std::disable_sized_sentinel_for<I, I> = true;
328b52d6 68
6d0dff49
JW
69namespace __gnu_test
70{
71 // customization points
72 constexpr auto* iter_move = &std::ranges::iter_move;
73 constexpr auto* iter_swap = &std::ranges::iter_swap;
74 // sized sentinels
d99828ee
JW
75 constexpr bool const* disable_sized_sentinel_for
76 = &std::disable_sized_sentinel_for<void, void>;
6d0dff49
JW
77 // default sentinels
78 constexpr std::default_sentinel_t const* default_sentinel
79 = &std::default_sentinel;
80 // unreachable sentinels
81 constexpr std::unreachable_sentinel_t const* unreachable_sentinel
82 = &std::unreachable_sentinel;
83}