ticket 7885 rvalue support for metafunctions.

This commit is contained in:
Neil Groves
2014-03-09 00:28:43 +00:00
parent be85e295e8
commit 4ebbbba82b
22 changed files with 844 additions and 8 deletions

View File

@ -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
>
{
};

View File

@ -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

View File

@ -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
>
{ };
}

View File

@ -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

View File

@ -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>
{};
//////////////////////////////////////////////////////////////////////////

View File

@ -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 >
{ };
}

View File

@ -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;
};