mirror of
https://github.com/boostorg/iterator.git
synced 2025-08-01 05:44:32 +02:00
Fixes.
This commit is contained in:
@@ -8,7 +8,6 @@
|
||||
#define BOOST_ITERATOR_FACADE_23022003THW_HPP
|
||||
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/core/addressof.hpp>
|
||||
|
||||
#include <boost/iterator/interoperable.hpp>
|
||||
#include <boost/iterator/iterator_traits.hpp>
|
||||
@@ -171,7 +170,7 @@ namespace iterators {
|
||||
// Provides (r++)->foo()
|
||||
value_type* operator->() const
|
||||
{
|
||||
return boost::addressof(stored_value);
|
||||
return std::addressof(stored_value);
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -271,7 +270,7 @@ namespace iterators {
|
||||
// Provides (r++)->foo()
|
||||
value_type* operator->() const
|
||||
{
|
||||
return boost::addressof(dereference_proxy.stored_value);
|
||||
return std::addressof(dereference_proxy.stored_value);
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -373,10 +372,10 @@ namespace iterators {
|
||||
struct proxy
|
||||
{
|
||||
explicit proxy(Reference const& x) : m_ref(x) {}
|
||||
Reference* operator->() { return boost::addressof(m_ref); }
|
||||
Reference* operator->() { return std::addressof(m_ref); }
|
||||
// This function is needed for MWCW and BCC, which won't call
|
||||
// operator-> again automatically per 13.3.1.2 para 8
|
||||
operator Reference*() { return boost::addressof(m_ref); }
|
||||
operator Reference*() { return std::addressof(m_ref); }
|
||||
Reference m_ref;
|
||||
};
|
||||
typedef proxy result_type;
|
||||
@@ -392,7 +391,7 @@ namespace iterators {
|
||||
typedef Pointer result_type;
|
||||
static result_type apply(T& x)
|
||||
{
|
||||
return boost::addressof(x);
|
||||
return std::addressof(x);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -762,11 +761,11 @@ namespace iterators {
|
||||
typename boost::iterators::detail::operator_brackets_result<Derived, Value, reference>::type
|
||||
operator[](difference_type n) const
|
||||
{
|
||||
const auto use_proxy = boost::iterators::detail::use_operator_brackets_proxy<Value, Reference>::value;
|
||||
using use_proxy = boost::iterators::detail::use_operator_brackets_proxy<Value, Reference>;
|
||||
|
||||
return boost::iterators::detail::make_operator_brackets_result<Derived>(
|
||||
this->derived() + n
|
||||
, std::integral_constant<bool, use_proxy>{}
|
||||
, std::integral_constant<bool, use_proxy::value>{}
|
||||
);
|
||||
}
|
||||
|
||||
|
@@ -45,16 +45,19 @@ namespace boost {
|
||||
// Do separate tests for *i++ so we can treat, e.g., smart pointers,
|
||||
// as readable and/or writable iterators.
|
||||
template <class Iterator, class T>
|
||||
void readable_iterator_traversal_test(Iterator i1, T v, std::true_type) {
|
||||
void readable_iterator_traversal_test(Iterator i1, T v, std::true_type)
|
||||
{
|
||||
T v2(*i1++);
|
||||
BOOST_TEST(v == v2);
|
||||
}
|
||||
|
||||
template <class Iterator, class T>
|
||||
void readable_iterator_traversal_test(const Iterator i1, T v, std::false_type) {}
|
||||
void readable_iterator_traversal_test(const Iterator i1, T v, std::false_type)
|
||||
{}
|
||||
|
||||
template <class Iterator, class T>
|
||||
void writable_iterator_traversal_test(Iterator i1, T v, std::true_type) {
|
||||
void writable_iterator_traversal_test(Iterator i1, T v, std::true_type)
|
||||
{
|
||||
++i1; // we just wrote into that position
|
||||
*i1++ = v;
|
||||
Iterator x(i1++);
|
||||
@@ -62,11 +65,13 @@ void writable_iterator_traversal_test(Iterator i1, T v, std::true_type) {
|
||||
}
|
||||
|
||||
template <class Iterator, class T>
|
||||
void writable_iterator_traversal_test(const Iterator i1, T v, std::false_type) {}
|
||||
void writable_iterator_traversal_test(const Iterator i1, T v, std::false_type)
|
||||
{}
|
||||
|
||||
// Preconditions: *i == v
|
||||
template <class Iterator, class T>
|
||||
void readable_iterator_test(const Iterator i1, T v) {
|
||||
void readable_iterator_test(const Iterator i1, T v)
|
||||
{
|
||||
Iterator i2(i1); // Copy Constructible
|
||||
typedef typename std::iterator_traits<Iterator>::reference ref_t;
|
||||
ref_t r1 = *i1;
|
||||
@@ -104,7 +109,9 @@ void writable_iterator_test(Iterator i, T v, T v2) {
|
||||
#endif
|
||||
}
|
||||
|
||||
template <class Iterator> void swappable_iterator_test(Iterator i, Iterator j) {
|
||||
template <class Iterator>
|
||||
void swappable_iterator_test(Iterator i, Iterator j)
|
||||
{
|
||||
Iterator i2(i), j2(j);
|
||||
typename std::iterator_traits<Iterator>::value_type bi = *i, bj = *j;
|
||||
iter_swap(i2, j2);
|
||||
@@ -155,7 +162,8 @@ void non_const_lvalue_iterator_test(Iterator i, T v1, T v2) {
|
||||
}
|
||||
|
||||
template <class Iterator, class T>
|
||||
void forward_readable_iterator_test(Iterator i, Iterator j, T val1, T val2) {
|
||||
void forward_readable_iterator_test(Iterator i, Iterator j, T val1, T val2)
|
||||
{
|
||||
Iterator i2;
|
||||
Iterator i3(i);
|
||||
i2 = i;
|
||||
@@ -176,7 +184,8 @@ void forward_readable_iterator_test(Iterator i, Iterator j, T val1, T val2) {
|
||||
}
|
||||
|
||||
template <class Iterator, class T>
|
||||
void forward_swappable_iterator_test(Iterator i, Iterator j, T val1, T val2) {
|
||||
void forward_swappable_iterator_test(Iterator i, Iterator j, T val1, T val2)
|
||||
{
|
||||
forward_readable_iterator_test(i, j, val1, val2);
|
||||
Iterator i2 = i;
|
||||
++i2;
|
||||
@@ -186,7 +195,8 @@ void forward_swappable_iterator_test(Iterator i, Iterator j, T val1, T val2) {
|
||||
// bidirectional
|
||||
// Preconditions: *i == v1, *++i == v2
|
||||
template <class Iterator, class T>
|
||||
void bidirectional_readable_iterator_test(Iterator i, T v1, T v2) {
|
||||
void bidirectional_readable_iterator_test(Iterator i, T v1, T v2)
|
||||
{
|
||||
Iterator j(i);
|
||||
++j;
|
||||
forward_readable_iterator_test(i, j, v1, v2);
|
||||
@@ -215,12 +225,14 @@ void bidirectional_readable_iterator_test(Iterator i, T v1, T v2) {
|
||||
// random access
|
||||
// Preconditions: [i,i+N) is a valid range
|
||||
template <class Iterator, class TrueVals>
|
||||
void random_access_readable_iterator_test(Iterator i, int N, TrueVals vals) {
|
||||
void random_access_readable_iterator_test(Iterator i, int N, TrueVals vals)
|
||||
{
|
||||
bidirectional_readable_iterator_test(i, vals[0], vals[1]);
|
||||
const Iterator j = i;
|
||||
int c;
|
||||
|
||||
for (c = 0; c < N - 1; ++c) {
|
||||
for (c = 0; c < N - 1; ++c)
|
||||
{
|
||||
BOOST_TEST(i == j + c);
|
||||
BOOST_TEST(*i == vals[c]);
|
||||
typename std::iterator_traits<Iterator>::value_type x = j[c];
|
||||
@@ -235,7 +247,8 @@ void random_access_readable_iterator_test(Iterator i, int N, TrueVals vals) {
|
||||
}
|
||||
|
||||
Iterator k = j + N - 1;
|
||||
for (c = 0; c < N - 1; ++c) {
|
||||
for (c = 0; c < N - 1; ++c)
|
||||
{
|
||||
BOOST_TEST(i == k - c);
|
||||
BOOST_TEST(*i == vals[N - 1 - c]);
|
||||
typename std::iterator_traits<Iterator>::value_type x = j[N - 1 - c];
|
||||
|
@@ -7,7 +7,7 @@
|
||||
|
||||
#include <type_traits>
|
||||
|
||||
#define STATIC_ASSERT_SAME( T1,T2 ) static_assert(std::is_same<T1, T2>::value, "T1 ans T2 are expected to be the same types.")
|
||||
#define STATIC_ASSERT_SAME( T1,T2 ) static_assert(std::is_same<T1, T2>::value, "T1 and T2 are expected to be the same types.")
|
||||
|
||||
template <class T1, class T2>
|
||||
struct static_assert_same
|
||||
|
Reference in New Issue
Block a user