iterator_adaptor_cc.cpp 2.2 KB

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