From b948d9af17c4aadb4cc0b057ea85ee86f0915e8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorsten=20J=C3=B8rgen=20Ottosen?= Date: Thu, 12 Jun 2008 10:00:54 +0000 Subject: [PATCH] fixes for problems from Trac [SVN r46345] --- include/boost/range/iterator_range.hpp | 12 +++++++----- include/boost/range/sub_range.hpp | 14 +++++++++++--- 2 files changed, 18 insertions(+), 8 deletions(-) mode change 100755 => 100644 include/boost/range/iterator_range.hpp mode change 100755 => 100644 include/boost/range/sub_range.hpp diff --git a/include/boost/range/iterator_range.hpp b/include/boost/range/iterator_range.hpp old mode 100755 new mode 100644 index 6a85a45..d118224 --- a/include/boost/range/iterator_range.hpp +++ b/include/boost/range/iterator_range.hpp @@ -185,7 +185,7 @@ namespace boost m_Begin(Begin), m_End(End) #ifndef NDEBUG , singular(false) - #endif + #endif {} //! Constructor from a Range @@ -210,7 +210,7 @@ namespace boost template< class Range > iterator_range( const Range& r, iterator_range_detail::const_range_tag ) : m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) ) - #ifndef NDEBUG + #ifndef NDEBUG , singular(false) #endif {} @@ -219,7 +219,7 @@ namespace boost template< class Range > iterator_range( Range& r, iterator_range_detail::range_tag ) : m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) ) - #ifndef NDEBUG + #ifndef NDEBUG , singular(false) #endif {} @@ -390,13 +390,15 @@ namespace boost bool singular; #endif - #ifndef NDEBUG public: bool is_singular() const { + #ifndef NDEBUG return singular; + #else + return false; + #endif } - #endif protected: // diff --git a/include/boost/range/sub_range.hpp b/include/boost/range/sub_range.hpp old mode 100755 new mode 100644 index d033b14..dc66692 --- a/include/boost/range/sub_range.hpp +++ b/include/boost/range/sub_range.hpp @@ -23,6 +23,8 @@ #include #include #include +#include +#include namespace boost { @@ -41,6 +43,12 @@ namespace boost typedef BOOST_DEDUCED_TYPENAME range_difference::type difference_type; typedef BOOST_DEDUCED_TYPENAME range_size::type size_type; typedef BOOST_DEDUCED_TYPENAME base::reference reference; + + public: // for return value of front/back + typedef BOOST_DEDUCED_TYPENAME + boost::mpl::if_< boost::is_reference, + const BOOST_DEDUCED_TYPENAME boost::remove_reference::type&, + reference >::type const_reference; public: sub_range() : base() @@ -112,7 +120,7 @@ namespace boost return base::front(); } - const value_type& front() const + const_reference front() const { return base::front(); } @@ -122,7 +130,7 @@ namespace boost return base::back(); } - const value_type& back() const + const_reference back() const { return base::back(); } @@ -132,7 +140,7 @@ namespace boost return base::operator[](sz); } - const value_type& operator[]( difference_type sz ) const + const_reference operator[]( difference_type sz ) const { return base::operator[](sz); }