diff --git a/test/is_lvalue_iterator.cpp b/test/is_lvalue_iterator.cpp index 47a7f64..fdace52 100755 --- a/test/is_lvalue_iterator.cpp +++ b/test/is_lvalue_iterator.cpp @@ -32,12 +32,15 @@ struct noncopyable_iterator : boost::iterator +template +struct proxy_iterator + : boost::iterator { + typedef T value_type; + #if BOOST_WORKAROUND(__GNUC__, == 2) - typedef boost::iterator base; + typedef boost::iterator base; typedef base::iterator_category iterator_category; - typedef base::value_type value_type; typedef base::difference_type difference_type; typedef base::pointer pointer; typedef base::reference reference; @@ -45,8 +48,8 @@ struct proxy_iterator : boost::iterator struct proxy { - operator v&() const; - proxy& operator=(v) const; + operator value_type&() const; + proxy& operator=(value_type) const; }; proxy operator*() const; @@ -66,7 +69,22 @@ struct lvalue_iterator lvalue_iterator operator++(int); }; -BOOST_TT_BROKEN_COMPILER_SPEC(proxy_iterator::proxy) +template +struct constant_lvalue_iterator +{ + typedef T value_type; + typedef T const& reference; + typedef T difference_type; + typedef std::input_iterator_tag iterator_category; + typedef T const* pointer; + + T const& operator*() const; + constant_lvalue_iterator& operator++(); + constant_lvalue_iterator operator++(int); +}; + +BOOST_TT_BROKEN_COMPILER_SPEC(proxy_iterator::proxy) +BOOST_TT_BROKEN_COMPILER_SPEC(proxy_iterator::proxy) int main() { @@ -76,7 +94,8 @@ int main() BOOST_STATIC_ASSERT(boost::is_lvalue_iterator::const_iterator>::value); BOOST_STATIC_ASSERT(!boost::is_lvalue_iterator > >::value); BOOST_STATIC_ASSERT(!boost::is_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(!boost::is_lvalue_iterator::value); + BOOST_STATIC_ASSERT(!boost::is_lvalue_iterator >::value); + BOOST_STATIC_ASSERT(!boost::is_lvalue_iterator >::value); #ifndef BOOST_NO_LVALUE_RETURN_DETECTION BOOST_STATIC_ASSERT(!boost::is_lvalue_iterator::value); #endif @@ -87,7 +106,13 @@ int main() BOOST_STATIC_ASSERT(boost::is_lvalue_iterator >::value); BOOST_STATIC_ASSERT(boost::is_lvalue_iterator >::value); BOOST_STATIC_ASSERT(boost::is_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(boost::is_lvalue_iterator >::value); + BOOST_STATIC_ASSERT(boost::is_lvalue_iterator >::value); + + + BOOST_STATIC_ASSERT(boost::is_lvalue_iterator >::value); + BOOST_STATIC_ASSERT(boost::is_lvalue_iterator >::value); + BOOST_STATIC_ASSERT(boost::is_lvalue_iterator >::value); + BOOST_STATIC_ASSERT(boost::is_lvalue_iterator >::value); @@ -97,17 +122,24 @@ int main() BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator::const_iterator>::value); BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator > >::value); BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator::value); + BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator >::value); + BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator >::value); #ifndef BOOST_NO_LVALUE_RETURN_DETECTION BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator::value); #endif BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator::value); BOOST_STATIC_ASSERT(boost::is_non_const_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(boost::is_non_const_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(boost::is_non_const_lvalue_iterator >::value); - BOOST_STATIC_ASSERT(boost::is_non_const_lvalue_iterator >::value); +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) BOOST_STATIC_ASSERT(boost::is_non_const_lvalue_iterator >::value); +#endif + BOOST_STATIC_ASSERT(boost::is_non_const_lvalue_iterator >::value); + BOOST_STATIC_ASSERT(boost::is_non_const_lvalue_iterator >::value); + + BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator >::value); + BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator >::value); + BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator >::value); + BOOST_STATIC_ASSERT(!boost::is_non_const_lvalue_iterator >::value); return 0; }