forked from boostorg/range
ticket 7885 rvalue support for metafunctions.
This commit is contained in:
@ -65,7 +65,7 @@ struct range_const_iterator< T[sz] >
|
||||
template<typename C>
|
||||
struct range_const_iterator
|
||||
: range_detail::range_const_iterator<
|
||||
typename remove_reference<C>::type
|
||||
BOOST_DEDUCED_TYPENAME remove_reference<C>::type
|
||||
>
|
||||
{
|
||||
};
|
||||
|
@ -26,7 +26,8 @@ namespace boost
|
||||
|
||||
template< typename C >
|
||||
struct range_const_reverse_iterator
|
||||
: range_reverse_iterator<const typename remove_reference<C>::type>
|
||||
: range_reverse_iterator<
|
||||
const BOOST_DEDUCED_TYPENAME remove_reference<C>::type>
|
||||
{ };
|
||||
|
||||
} // namespace boost
|
||||
|
@ -18,11 +18,17 @@
|
||||
#include <boost/range/config.hpp>
|
||||
#include <boost/range/iterator.hpp>
|
||||
#include <boost/iterator/iterator_traits.hpp>
|
||||
#include <boost/type_traits/remove_reference.hpp>
|
||||
|
||||
namespace boost
|
||||
{
|
||||
template< class T >
|
||||
struct range_difference : iterator_difference< typename range_iterator<T>::type >
|
||||
struct range_difference
|
||||
: iterator_difference<
|
||||
BOOST_DEDUCED_TYPENAME range_iterator<
|
||||
BOOST_DEDUCED_TYPENAME remove_reference<T>::type
|
||||
>::type
|
||||
>
|
||||
{ };
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include <boost/mpl/eval_if.hpp>
|
||||
#include <boost/mpl/has_xxx.hpp>
|
||||
#include <boost/range/iterator.hpp>
|
||||
#include <boost/type_traits/remove_reference.hpp>
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
|
||||
namespace boost
|
||||
@ -67,12 +68,14 @@ namespace boost
|
||||
|
||||
template<class T>
|
||||
struct has_range_iterator
|
||||
: range_detail::has_range_iterator_impl<T>
|
||||
: range_detail::has_range_iterator_impl<
|
||||
BOOST_DEDUCED_TYPENAME remove_reference<T>::type>
|
||||
{};
|
||||
|
||||
template<class T>
|
||||
struct has_range_const_iterator
|
||||
: range_detail::has_range_const_iterator_impl<T>
|
||||
: range_detail::has_range_const_iterator_impl<
|
||||
BOOST_DEDUCED_TYPENAME remove_reference<T>::type>
|
||||
{};
|
||||
} // namespace boost
|
||||
|
||||
|
@ -19,12 +19,14 @@
|
||||
|
||||
|
||||
#include <boost/range/detail/extract_optional_type.hpp>
|
||||
#include <boost/type_traits/remove_reference.hpp>
|
||||
#include <boost/iterator/iterator_traits.hpp>
|
||||
#include <cstddef>
|
||||
#include <utility>
|
||||
|
||||
namespace boost
|
||||
{
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// default
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
@ -34,7 +36,9 @@ namespace boost
|
||||
}
|
||||
|
||||
template< typename C >
|
||||
struct range_mutable_iterator : range_detail::extract_iterator<C>
|
||||
struct range_mutable_iterator
|
||||
: range_detail::extract_iterator<
|
||||
BOOST_DEDUCED_TYPENAME remove_reference<C>::type>
|
||||
{};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
@ -22,7 +22,8 @@
|
||||
namespace boost
|
||||
{
|
||||
template< class T >
|
||||
struct range_pointer : iterator_pointer< typename range_iterator<T>::type >
|
||||
struct range_pointer
|
||||
: iterator_pointer< BOOST_DEDUCED_TYPENAME range_iterator<T>::type >
|
||||
{ };
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
#include <boost/range/config.hpp>
|
||||
#include <boost/range/iterator.hpp>
|
||||
#include <boost/type_traits/remove_reference.hpp>
|
||||
#include <boost/iterator/reverse_iterator.hpp>
|
||||
|
||||
|
||||
@ -30,7 +31,8 @@ namespace boost
|
||||
struct range_reverse_iterator
|
||||
{
|
||||
typedef reverse_iterator<
|
||||
BOOST_DEDUCED_TYPENAME range_iterator<C>::type > type;
|
||||
BOOST_DEDUCED_TYPENAME range_iterator<
|
||||
BOOST_DEDUCED_TYPENAME remove_reference<C>::type>::type > type;
|
||||
};
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user