diff --git a/test/indirect_iterator_test.cpp b/test/indirect_iterator_test.cpp index 4fb5b37..e66ba9d 100644 --- a/test/indirect_iterator_test.cpp +++ b/test/indirect_iterator_test.cpp @@ -5,6 +5,8 @@ // to its suitability for any purpose. // Revision History +// 22 Nov 2002 Thomas Witt +// Added interoperability check. // 08 Mar 2001 Jeremy Siek // Moved test of indirect iterator into its own file. It to // to be in iterator_adaptor_test.cpp. @@ -14,8 +16,10 @@ #include #include -#include +#include +#include #include +#include #include #include #include @@ -134,6 +138,19 @@ main() typedef std::deque > shared_t; shared_t shared; + // Concept checks + { + typedef boost::indirect_iterator iter_t; + typedef boost::indirect_iterator c_iter_t; + + // Older Dinkumware and GCC standard lib don't supply symmetric constant/mutable + // iterator operators +#if !defined(BOOST_MSVC_STD_ITERATOR) && (!defined(_CPPLIB_VER) || _CPPLIB_VER > 310) \ + && (__GNUC__ != 2 || defined(__SGI_STL_PORT)) + boost::function_requires< boost_concepts::InteroperableConcept >(); +#endif + } + // Test indirect_iterator_generator { for (int jj = 0; jj < N; ++jj) diff --git a/test/iterator_adaptor_cc.cpp b/test/iterator_adaptor_cc.cpp index 810d0db..b64c7b7 100644 --- a/test/iterator_adaptor_cc.cpp +++ b/test/iterator_adaptor_cc.cpp @@ -7,20 +7,22 @@ int main() { { - typedef boost::reverse_iterator, - std::ptrdiff_t> rev_iter; + typedef boost::reverse_iterator rev_iter; + typedef boost::reverse_iterator c_rev_iter; + boost::function_requires< boost_concepts::MutableLvalueIteratorConcept >(); boost::function_requires< boost_concepts::RandomAccessTraversalConcept >(); boost::function_requires< boost::RandomAccessIteratorConcept >(); + boost::function_requires< boost_concepts::InteroperableConcept >(); } { - typedef boost::reverse_iterator::const_iterator, int, const int&, const int*, - boost::iterator_tag - , std::ptrdiff_t> rev_iter; - boost::function_requires< boost_concepts::ConstantLvalueIteratorConcept >(); - boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); - boost::function_requires< boost::BidirectionalIteratorConcept >(); + typedef boost::reverse_iterator::iterator> rev_iter; + typedef boost::reverse_iterator::const_iterator> c_rev_iter; + + boost::function_requires< boost_concepts::ConstantLvalueIteratorConcept >(); + boost::function_requires< boost_concepts::BidirectionalTraversalConcept >(); + boost::function_requires< boost::BidirectionalIteratorConcept >(); + boost::function_requires< boost_concepts::InteroperableConcept >(); } return boost::exit_success; diff --git a/test/transform_iterator_test.cpp b/test/transform_iterator_test.cpp index 585c236..61081f9 100644 --- a/test/transform_iterator_test.cpp +++ b/test/transform_iterator_test.cpp @@ -5,6 +5,8 @@ // to its suitability for any purpose. // Revision History +// 22 Nov 2002 Thomas Witt +// Added interoperability check. // 28 Oct 2002 Jeremy Siek // Updated for new iterator adaptors. // 08 Mar 2001 Jeremy Siek @@ -15,8 +17,10 @@ #include #include #include +#include #include #include +#include struct mult_functor { typedef int result_type; @@ -36,6 +40,14 @@ main() { const int N = 10; + // Concept checks + { + typedef boost::transform_iterator iter_t; + typedef boost::transform_iterator c_iter_t; + + boost::function_requires< boost_concepts::InteroperableConcept >(); + } + // Test transform_iterator { int x[N], y[N];