diff --git a/include/boost/range/begin.hpp b/include/boost/range/begin.hpp index ef8b8cf..9374568 100755 --- a/include/boost/range/begin.hpp +++ b/include/boost/range/begin.hpp @@ -123,4 +123,14 @@ inline BOOST_DEDUCED_TYPENAME range_const_iterator::type begin( const T& r ) #endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING +namespace boost +{ + template< class T > + inline BOOST_DEDUCED_TYPENAME range_const_iterator::type + const_begin( const T& r ) + { + return begin( r ); + } +} + #endif diff --git a/include/boost/range/end.hpp b/include/boost/range/end.hpp index e588c0e..a0fa09d 100755 --- a/include/boost/range/end.hpp +++ b/include/boost/range/end.hpp @@ -143,4 +143,15 @@ inline range_const_iterator::type end( const wch #endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING + +namespace boost +{ + template< class T > + inline BOOST_DEDUCED_TYPENAME range_const_iterator::type + const_end( const T& r ) + { + return end( r ); + } +} + #endif diff --git a/include/boost/range/rbegin.hpp b/include/boost/range/rbegin.hpp index a7dc914..06b7314 100755 --- a/include/boost/range/rbegin.hpp +++ b/include/boost/range/rbegin.hpp @@ -54,6 +54,13 @@ rbegin( const C& c ) #endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING +template< class T > +inline BOOST_DEDUCED_TYPENAME range_const_reverse_iterator::type +const_rbegin( const T& r ) +{ + return rbegin( r ); } +} // namespace 'boost' + #endif diff --git a/include/boost/range/rend.hpp b/include/boost/range/rend.hpp index f04df18..151a035 100755 --- a/include/boost/range/rend.hpp +++ b/include/boost/range/rend.hpp @@ -54,6 +54,13 @@ rend( const C& c ) #endif +template< class T > +inline BOOST_DEDUCED_TYPENAME range_const_reverse_iterator::type +const_rend( const T& r ) +{ + return rend( r ); +} + } // namespace 'boost' #endif diff --git a/test/Jamfile b/test/Jamfile index c3f6eed..30fd632 100755 --- a/test/Jamfile +++ b/test/Jamfile @@ -72,12 +72,12 @@ test-suite range : : reversible_range_test ] -# [ run -# compat1.cpp -# : : -# : -# : compat1_test -# ] + [ run + const_ranges.cpp + : : + : + : const_ranges + ] # [ run # compat3.cpp # : : diff --git a/test/const_ranges.cpp b/test/const_ranges.cpp new file mode 100755 index 0000000..81080da --- /dev/null +++ b/test/const_ranges.cpp @@ -0,0 +1,69 @@ +// Boost.Range library +// +// Copyright Thorsten Ottosen 2003-2004. Use, modification and +// distribution is subject to the Boost Software License, Version +// 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// For more information, see http://www.boost.org/libs/range/ +// + + +#include + +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) +# pragma warn -8091 // supress warning in Boost.Test +# pragma warn -8057 // unused argument argc/argv in Boost.Test +#endif + +#include +#include + +// This should be included before "using namespace boost", +// otherwise gcc headers will be confused with boost::iterator +// namespace. +#include + +using namespace boost; +using namespace std; + +template< class T > +const T& as_const( const T& r ) +{ + return r; +} + +void check_const_ranges() +{ + std::string foo( "foo" ); + const std::string bar( "bar" ); + + BOOST_CHECK( const_begin( foo ) == begin( as_const( foo ) ) ); + BOOST_CHECK( const_end( foo ) == end( as_const( foo ) ) ); + BOOST_CHECK( const_rbegin( foo ) == rbegin( as_const( foo ) ) ); + BOOST_CHECK( const_rend( foo ) == rend( as_const( foo ) ) ); + + BOOST_CHECK( const_begin( bar ) == begin( as_const( bar ) ) ); + BOOST_CHECK( const_end( bar ) == end( as_const( bar ) ) ); + BOOST_CHECK( const_rbegin( bar ) == rbegin( as_const( bar ) ) ); + BOOST_CHECK( const_rend( bar ) == rend( as_const( bar ) ) ); + +} + + + +using boost::unit_test_framework::test_suite; + +test_suite* init_unit_test_suite( int argc, char* argv[] ) +{ + test_suite* test = BOOST_TEST_SUITE( "Range Test Suite" ); + + test->add( BOOST_TEST_CASE( &check_const_ranges ) ); + + return test; +} + + + + +