| 1 | #include <iostream>
|
|---|
| 2 | #include <boost/iterator/transform_iterator.hpp>
|
|---|
| 3 | #include <boost/iterator/iterator_adaptor.hpp>
|
|---|
| 4 | #include <boost/iterator/permutation_iterator.hpp>
|
|---|
| 5 | #include <boost/iterator/zip_iterator.hpp>
|
|---|
| 6 | #include <boost/concept_check.hpp>
|
|---|
| 7 | #include <boost/tuple/tuple.hpp>
|
|---|
| 8 |
|
|---|
| 9 | #include <vector>
|
|---|
| 10 |
|
|---|
| 11 | typedef std::vector<int>
|
|---|
| 12 | Container;
|
|---|
| 13 |
|
|---|
| 14 | typedef int (*FunctionType)(int) ;
|
|---|
| 15 |
|
|---|
| 16 | typedef boost::transform_iterator< FunctionType, Container::iterator >
|
|---|
| 17 | Iterator1;
|
|---|
| 18 |
|
|---|
| 19 | struct Iterator2 : public boost::iterator_adaptor< Iterator2, Container::iterator >
|
|---|
| 20 | {};
|
|---|
| 21 |
|
|---|
| 22 | typedef boost::permutation_iterator< Container::iterator, Container::iterator >
|
|---|
| 23 | Iterator3;
|
|---|
| 24 |
|
|---|
| 25 | typedef boost::zip_iterator< boost::tuple< Container::iterator, Container :: iterator > >
|
|---|
| 26 | Iterator4;
|
|---|
| 27 |
|
|---|
| 28 | int main()
|
|---|
| 29 | {
|
|---|
| 30 | boost::function_requires< boost::RandomAccessIteratorConcept< Iterator3 > >() ; // Succeeds
|
|---|
| 31 | boost::function_requires< boost::RandomAccessIteratorConcept< Iterator2 > >() ; // Succeeds
|
|---|
| 32 |
|
|---|
| 33 | boost::function_requires< boost::InputIteratorConcept< Iterator1 > >(); // Succeeds
|
|---|
| 34 | boost::function_requires< boost::InputIteratorConcept< Iterator4 > >(); // Succeeds
|
|---|
| 35 | // boost::function_requires< boost::RandomAccessIteratorConcept< Iterator1 > >() ; // Fails
|
|---|
| 36 | // boost::function_requires< boost::RandomAccessIteratorConcept< Iterator4 > >() ; // Fails
|
|---|
| 37 | std::cout << "boe" << std::endl;
|
|---|
| 38 |
|
|---|
| 39 | return 0;
|
|---|
| 40 | }
|
|---|