Improved category handling in iterator_adaptor.

[SVN r19231]
This commit is contained in:
Thomas Witt
2003-07-20 19:18:40 +00:00
parent 3fe0d4b532
commit ed8c60c20b
6 changed files with 90 additions and 27 deletions

View File

@ -112,6 +112,17 @@ public:
{}
};
// Non-functional iterator for category modification checking
template <class Iter, class Category>
struct modify_category
: boost::iterator_adaptor<
modify_category<Iter, Category>
, Iter
, boost::use_default
, Category
>
{};
template <class T>
struct fwd_iterator
: boost::iterator_adaptor<
@ -221,6 +232,15 @@ main()
test = static_assert_same<BaseIter::iterator_category::access, boost::writable_lvalue_iterator_tag>::value;
test = static_assert_same<Iter::iterator_category::access, boost::readable_lvalue_iterator_tag>::value;
// Test category modification
typedef modify_category<BaseIter, boost::readable_iterator_tag> ReadableIter;
test = static_assert_same<ReadableIter::iterator_category::access, boost::readable_iterator_tag>::value;
typedef modify_category<BaseIter, boost::incrementable_traversal_tag> IncrementableIter;
test = static_assert_same<BaseIter::iterator_category::traversal, boost::random_access_traversal_tag>::value;
test = static_assert_same<IncrementableIter::iterator_category::traversal, boost::incrementable_traversal_tag>::value;
}
// Test the iterator_adaptor