forked from boostorg/range
fix concepts on gccc4.8.2 and dodgy test iterators in iterator_range_drop.cpp test case.
This commit is contained in:
@ -23,6 +23,7 @@
|
||||
#include <boost/range/iterator.hpp>
|
||||
#include <boost/range/value_type.hpp>
|
||||
#include <boost/range/detail/misc_concept.hpp>
|
||||
#include <boost/type_traits/remove_reference.hpp>
|
||||
|
||||
/*!
|
||||
* \file
|
||||
@ -260,14 +261,24 @@ namespace boost {
|
||||
struct SinglePassRangeConcept
|
||||
{
|
||||
#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
|
||||
typedef BOOST_DEDUCED_TYPENAME range_iterator<T const>::type const_iterator;
|
||||
typedef BOOST_DEDUCED_TYPENAME range_iterator<T>::type iterator;
|
||||
// A few compilers don't like the rvalue reference T types so just
|
||||
// remove it.
|
||||
typedef BOOST_DEDUCED_TYPENAME remove_reference<T>::type Rng;
|
||||
|
||||
BOOST_RANGE_CONCEPT_ASSERT((range_detail::SinglePassIteratorConcept<iterator>));
|
||||
BOOST_RANGE_CONCEPT_ASSERT((range_detail::SinglePassIteratorConcept<const_iterator>));
|
||||
typedef BOOST_DEDUCED_TYPENAME range_iterator<
|
||||
Rng const
|
||||
>::type const_iterator;
|
||||
|
||||
BOOST_CONCEPT_USAGE(SinglePassRangeConcept)
|
||||
{
|
||||
typedef BOOST_DEDUCED_TYPENAME range_iterator<Rng>::type iterator;
|
||||
|
||||
BOOST_RANGE_CONCEPT_ASSERT((
|
||||
range_detail::SinglePassIteratorConcept<iterator>));
|
||||
|
||||
BOOST_RANGE_CONCEPT_ASSERT((
|
||||
range_detail::SinglePassIteratorConcept<const_iterator>));
|
||||
|
||||
BOOST_CONCEPT_USAGE(SinglePassRangeConcept)
|
||||
{
|
||||
// This has been modified from assigning to this->i
|
||||
// (where i was a member variable) to improve
|
||||
// compatibility with Boost.Lambda
|
||||
@ -281,7 +292,7 @@ namespace boost {
|
||||
}
|
||||
|
||||
private:
|
||||
void const_constraints(const T& const_range)
|
||||
void const_constraints(const Rng& const_range)
|
||||
{
|
||||
const_iterator ci1 = boost::begin(const_range);
|
||||
const_iterator ci2 = boost::end(const_range);
|
||||
@ -294,7 +305,7 @@ namespace boost {
|
||||
// The type of m_range is T* rather than T because it allows
|
||||
// T to be an abstract class. The other obvious alternative of
|
||||
// T& produces a warning on some compilers.
|
||||
T* m_range;
|
||||
Rng* m_range;
|
||||
#endif
|
||||
};
|
||||
|
||||
@ -308,11 +319,11 @@ namespace boost {
|
||||
#endif
|
||||
};
|
||||
|
||||
template<class Range>
|
||||
template<class T>
|
||||
struct WriteableRangeConcept
|
||||
{
|
||||
#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
|
||||
typedef BOOST_DEDUCED_TYPENAME range_iterator<Range>::type iterator;
|
||||
typedef BOOST_DEDUCED_TYPENAME range_iterator<T>::type iterator;
|
||||
|
||||
BOOST_CONCEPT_USAGE(WriteableRangeConcept)
|
||||
{
|
||||
@ -320,7 +331,7 @@ namespace boost {
|
||||
}
|
||||
private:
|
||||
iterator i;
|
||||
BOOST_DEDUCED_TYPENAME range_value<Range>::type v;
|
||||
BOOST_DEDUCED_TYPENAME range_value<T>::type v;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -53,7 +53,7 @@ private:
|
||||
return m_it == other.m_it;
|
||||
}
|
||||
|
||||
boost::int32_t dereference() const
|
||||
reference dereference() const
|
||||
{
|
||||
return *m_it;
|
||||
}
|
||||
@ -97,7 +97,7 @@ private:
|
||||
return m_it == other.m_it;
|
||||
}
|
||||
|
||||
boost::int32_t dereference() const
|
||||
reference dereference() const
|
||||
{
|
||||
return *m_it;
|
||||
}
|
||||
|
Reference in New Issue
Block a user