Commit e94f2542 by Jonathan Wakely

libstdc++: Support N3644 "Null Forward Iterators" for testsuite iterators

Comparing value-initialized forward_iterator_wrapper<T> objects fails an
assertion, but should be valid in C++14 and later.

	* testsuite/util/testsuite_iterators.h (forward_iterator_wrapper): Add
	equality comparisons that support value-initialized iterators.
parent e431546f
2020-02-27 Jonathan Wakely <jwakely@redhat.com>
* testsuite/util/testsuite_iterators.h (forward_iterator_wrapper): Add
equality comparisons that support value-initialized iterators.
* include/bits/boost_concept_check.h (__function_requires): Add
_GLIBCXX14_CONSTEXPR.
* testsuite/25_algorithms/min/concept_checks.cc: New test.
......
......@@ -337,6 +337,26 @@ namespace __gnu_test
++*this;
return tmp;
}
#if __cplusplus >= 201402L
bool
operator==(const forward_iterator_wrapper& it) const noexcept
{
// Since C++14 value-initialized forward iterators are comparable.
if (this->SharedInfo == nullptr || it.SharedInfo == nullptr)
return this->SharedInfo == it.SharedInfo && this->ptr == it.ptr;
const input_iterator_wrapper<T>& base_this = *this;
const input_iterator_wrapper<T>& base_that = it;
return base_this == base_that;
}
bool
operator!=(const forward_iterator_wrapper& it) const noexcept
{
return !(*this == it);
}
#endif
};
/**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment