]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/iterator/test/concept_tests.cpp
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / boost / libs / iterator / test / concept_tests.cpp
CommitLineData
7c673cae
FG
1// (C) Copyright Jeremy Siek 2002.
2// Distributed under the Boost Software License, Version 1.0. (See
3// accompanying file LICENSE_1_0.txt or copy at
4// http://www.boost.org/LICENSE_1_0.txt)
5
6#include <boost/iterator/iterator_concepts.hpp>
7#include <boost/iterator/iterator_categories.hpp>
8#include <boost/operators.hpp>
9
b32b8144
FG
10#include <iterator>
11#include <cstddef>
12
7c673cae
FG
13struct new_random_access
14 : std::random_access_iterator_tag
15 , boost::random_access_traversal_tag
16{};
17
18struct new_iterator
7c673cae 19{
11fdf7f2
TL
20 typedef new_random_access iterator_category;
21 typedef int value_type;
22 typedef std::ptrdiff_t difference_type;
23 typedef int* pointer;
24 typedef int& reference;
25
7c673cae
FG
26 int& operator*() const { return *m_x; }
27 new_iterator& operator++() { return *this; }
28 new_iterator operator++(int) { return *this; }
29 new_iterator& operator--() { return *this; }
30 new_iterator operator--(int) { return *this; }
31 new_iterator& operator+=(std::ptrdiff_t) { return *this; }
32 new_iterator operator+(std::ptrdiff_t) { return *this; }
33 new_iterator& operator-=(std::ptrdiff_t) { return *this; }
34 std::ptrdiff_t operator-(const new_iterator&) const { return 0; }
35 new_iterator operator-(std::ptrdiff_t) const { return *this; }
36 bool operator==(const new_iterator&) const { return false; }
37 bool operator!=(const new_iterator&) const { return false; }
38 bool operator<(const new_iterator&) const { return false; }
39 int* m_x;
40};
41new_iterator operator+(std::ptrdiff_t, new_iterator x) { return x; }
42
43struct old_iterator
7c673cae 44{
11fdf7f2
TL
45 typedef std::random_access_iterator_tag iterator_category;
46 typedef int value_type;
47 typedef std::ptrdiff_t difference_type;
48 typedef int* pointer;
49 typedef int& reference;
50
7c673cae
FG
51 int& operator*() const { return *m_x; }
52 old_iterator& operator++() { return *this; }
53 old_iterator operator++(int) { return *this; }
54 old_iterator& operator--() { return *this; }
55 old_iterator operator--(int) { return *this; }
56 old_iterator& operator+=(std::ptrdiff_t) { return *this; }
57 old_iterator operator+(std::ptrdiff_t) { return *this; }
58 old_iterator& operator-=(std::ptrdiff_t) { return *this; }
59 old_iterator operator-(std::ptrdiff_t) const { return *this; }
60 std::ptrdiff_t operator-(const old_iterator&) const { return 0; }
61 bool operator==(const old_iterator&) const { return false; }
62 bool operator!=(const old_iterator&) const { return false; }
63 bool operator<(const old_iterator&) const { return false; }
64 int* m_x;
65};
66old_iterator operator+(std::ptrdiff_t, old_iterator x) { return x; }
67
68int
69main()
70{
71 boost::iterator_traversal<new_iterator>::type tc;
72 boost::random_access_traversal_tag derived = tc;
73 (void)derived;
f67539c2 74
7c673cae
FG
75 boost::function_requires<
76 boost_concepts::WritableIteratorConcept<int*> >();
77 boost::function_requires<
78 boost_concepts::LvalueIteratorConcept<int*> >();
79 boost::function_requires<
80 boost_concepts::RandomAccessTraversalConcept<int*> >();
81
82 boost::function_requires<
83 boost_concepts::ReadableIteratorConcept<const int*> >();
84 boost::function_requires<
85 boost_concepts::LvalueIteratorConcept<const int*> >();
86 boost::function_requires<
87 boost_concepts::RandomAccessTraversalConcept<const int*> >();
88
89 boost::function_requires<
90 boost_concepts::WritableIteratorConcept<new_iterator> >();
91 boost::function_requires<
92 boost_concepts::LvalueIteratorConcept<new_iterator> >();
93 boost::function_requires<
94 boost_concepts::RandomAccessTraversalConcept<new_iterator> >();
95
96 boost::function_requires<
97 boost_concepts::WritableIteratorConcept<old_iterator> >();
98 boost::function_requires<
99 boost_concepts::LvalueIteratorConcept<old_iterator> >();
100 boost::function_requires<
101 boost_concepts::RandomAccessTraversalConcept<old_iterator> >();
102
103 boost::function_requires<
104 boost_concepts::InteroperableIteratorConcept<int*, int const*> >();
105
106 return 0;
107}