X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=boost%2Frange%2Fhas_range_iterator.hpp;h=9eb58b35d21a29a97103e7f370962cb945537c64;hb=08c1e93fa36a49f49325a07fe91ff92c964c2b6c;hp=8046eb466dc011cafe0f143ce079093561261df2;hpb=bb4dd8289b351fae6b55e303f189127a394a1edd;p=platform%2Fupstream%2Fboost.git diff --git a/boost/range/has_range_iterator.hpp b/boost/range/has_range_iterator.hpp index 8046eb4..9eb58b3 100644 --- a/boost/range/has_range_iterator.hpp +++ b/boost/range/has_range_iterator.hpp @@ -7,12 +7,17 @@ // // For more information, see http://www.boost.org/libs/range/ // +// Acknowledgments: +// Ticket #8341: Arno Schoedl - improved handling of has_range_iterator upon +// use-cases where T was const. #ifndef BOOST_RANGE_HAS_ITERATOR_HPP_INCLUDED #define BOOST_RANGE_HAS_ITERATOR_HPP_INCLUDED #include +#include #include #include +#include #include namespace boost @@ -28,7 +33,16 @@ namespace boost }; template - struct has_range_iterator_impl > >::type> + struct has_range_iterator_impl< + T, + BOOST_DEDUCED_TYPENAME ::boost::enable_if< + BOOST_DEDUCED_TYPENAME mpl::eval_if, + has_type::type> >, + has_type > + >::type + >::type + > : boost::mpl::true_ { }; @@ -40,7 +54,12 @@ namespace boost }; template - struct has_range_const_iterator_impl > >::type> + struct has_range_const_iterator_impl< + T, + BOOST_DEDUCED_TYPENAME ::boost::enable_if< + has_type > + >::type + > : boost::mpl::true_ { }; @@ -49,12 +68,14 @@ namespace boost template struct has_range_iterator - : range_detail::has_range_iterator_impl + : range_detail::has_range_iterator_impl< + BOOST_DEDUCED_TYPENAME remove_reference::type> {}; template struct has_range_const_iterator - : range_detail::has_range_const_iterator_impl + : range_detail::has_range_const_iterator_impl< + BOOST_DEDUCED_TYPENAME remove_reference::type> {}; } // namespace boost