Ticket #4355: test.cpp

File test.cpp, 1.8 KB (added by rick68@…, 12 years ago)

test BidirectionalRangeConcept

Line 
1#include <iostream>
2#include <iterator>
3#include <utility>
4
5#include <boost/cstdlib.hpp>
6
7#include <boost/type_traits/is_base_and_derived.hpp>
8
9#include <boost/concept/requires.hpp>
10#include <boost/concept_check.hpp>
11
12#include <boost/iterator/iterator_categories.hpp>
13
14#define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 1
15#include <boost/range/concepts.hpp>
16
17typedef int ValueType;
18
19template <typename T = ValueType>
20struct Iterator : std::iterator<std::bidirectional_iterator_tag, T>
21{
22 typedef std::iterator<std::bidirectional_iterator_tag, T> base;
23
24 typedef typename std::iterator_traits<base>::value_type value_type;
25 typedef typename std::iterator_traits<base>::difference_type difference_type;
26 typedef typename std::iterator_traits<base>::reference reference;
27 typedef typename std::iterator_traits<base>::pointer pointer;
28 typedef typename std::iterator_traits<base>::iterator_category iterator_category;
29
30 Iterator(const Iterator&);
31 Iterator* operator&(void);
32 const Iterator* operator&(void) const;
33 Iterator& operator++(void);
34 Iterator operator++(int);
35 bool operator==(const Iterator&) const;
36 bool operator!=(const Iterator&) const;
37 Iterator();
38 Iterator& operator--(void);
39 Iterator operator--(int);
40};
41
42struct Container
43{
44 typedef Iterator<ValueType> iterator;
45 typedef Iterator<const ValueType> const_iterator;
46 iterator begin(void);
47 const_iterator begin(void) const;
48 iterator end(void);
49 const_iterator end(void) const;
50};
51
52
53template <typename T>
54BOOST_CONCEPT_REQUIRES
55(
56 ((boost::BidirectionalRangeConcept<Container>))
57 ((boost::BidirectionalRangeConcept<std::pair<Iterator<>, Iterator<> > >))
58 ((boost::BidirectionalRangeConcept<ValueType[68]>))
59 , (void)
60)
61check(...)
62{}
63
64
65int main(void)
66{
67 return boost::exit_success;
68}