• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (C) 2004 Jeremy Siek <jsiek@cs.indiana.edu>
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/reverse_iterator.hpp>
7 #include <boost/iterator/iterator_concepts.hpp>
8 #include <boost/concept_check.hpp>
9 #include <boost/cstdlib.hpp>
10 #include <list>
11 
main()12 int main()
13 {
14   {
15     typedef boost::reverse_iterator<int*>       rev_iter;
16     typedef boost::reverse_iterator<int const*> c_rev_iter;
17 
18     boost::function_requires< boost_concepts::WritableIteratorConcept<rev_iter> >();
19     boost::function_requires< boost_concepts::LvalueIteratorConcept<rev_iter> >();
20     boost::function_requires< boost_concepts::RandomAccessTraversalConcept<rev_iter> >();
21     boost::function_requires< boost::RandomAccessIteratorConcept<rev_iter> >();
22     boost::function_requires< boost_concepts::InteroperableIteratorConcept<rev_iter, c_rev_iter> >();
23   }
24 
25     // Many compilers' builtin container iterators don't interoperate well, though
26     // STLport fixes that problem.
27 #if defined(__SGI_STL_PORT)                                                             \
28     || !BOOST_WORKAROUND(__GNUC__, <= 2)                                                \
29     && !(BOOST_WORKAROUND(__GNUC__, == 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 1))    \
30     && !BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x551))                          \
31     && !BOOST_WORKAROUND(__LIBCOMO_VERSION__, BOOST_TESTED_AT(29))                      \
32     && !BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, <= 1)
33   {
34     typedef boost::reverse_iterator<std::list<int>::iterator>       rev_iter;
35     typedef boost::reverse_iterator<std::list<int>::const_iterator> c_rev_iter;
36 
37     boost::function_requires< boost_concepts::ReadableIteratorConcept<c_rev_iter> >();
38     boost::function_requires< boost_concepts::LvalueIteratorConcept<c_rev_iter> >();
39     boost::function_requires< boost_concepts::BidirectionalTraversalConcept<c_rev_iter> >();
40     boost::function_requires< boost::BidirectionalIteratorConcept<c_rev_iter> >();
41     boost::function_requires< boost_concepts::InteroperableIteratorConcept<rev_iter, c_rev_iter> >();
42   }
43 #endif
44 
45   return boost::exit_success;
46 }
47