mirror of
https://github.com/boostorg/stl_interfaces.git
synced 2026-01-19 04:42:12 +00:00
Work around GCC ICE related to v2::container_interface::cr{begin,end}.
This commit is contained in:
@@ -1128,12 +1128,14 @@ namespace boost { namespace stl_interfaces { namespace v2 {
|
||||
constexpr auto crbegin() const
|
||||
requires ranges::bidirectional_range<const Derived> &&
|
||||
ranges::common_range<const Derived> {
|
||||
return ranges::rbegin(derived());
|
||||
return stl_interfaces::reverse_iterator(ranges::iterator_t<const Derived>(
|
||||
ranges::end(mutable_derived())));
|
||||
}
|
||||
constexpr auto crend() const
|
||||
requires ranges::bidirectional_range<const Derived> &&
|
||||
ranges::common_range<const Derived> {
|
||||
return ranges::rend(derived());
|
||||
return stl_interfaces::reverse_iterator(ranges::iterator_t<const Derived>(
|
||||
ranges::begin(mutable_derived())));
|
||||
}
|
||||
|
||||
template<ranges::forward_range Container = Derived>
|
||||
|
||||
@@ -343,13 +343,10 @@ static_assert(
|
||||
writable_iter_t,
|
||||
decltype(std::declval<vec_type &>().crbegin())>::value,
|
||||
"");
|
||||
#if 0 // TODO: Broken. This somehow picks up the free operator!=() intended
|
||||
// for use with v1::container_interface.
|
||||
static_assert(
|
||||
ill_formed<writable_iter_t, decltype(std::declval<vec_type &>().crend())>::
|
||||
value,
|
||||
"");
|
||||
#endif
|
||||
|
||||
TEST(static_vec, iterators)
|
||||
{
|
||||
@@ -392,9 +389,7 @@ TEST(static_vec, iterators)
|
||||
EXPECT_TRUE(std::equal(v.cbegin(), v.cend(), a.begin(), a.end()));
|
||||
|
||||
EXPECT_TRUE(std::equal(v.rbegin(), v.rend(), ra.begin(), ra.end()));
|
||||
#if 0 // TODO: Broken.
|
||||
EXPECT_TRUE(std::equal(v.crbegin(), v.crend(), ra.begin(), ra.end()));
|
||||
#endif
|
||||
|
||||
*v.begin() = 8;
|
||||
*v.rbegin() = 9;
|
||||
@@ -444,9 +439,7 @@ TEST(static_vec, iterators)
|
||||
EXPECT_TRUE(std::equal(v.cbegin(), v.cend(), a.begin(), a.end()));
|
||||
|
||||
EXPECT_TRUE(std::equal(v.rbegin(), v.rend(), ra.begin(), ra.end()));
|
||||
#if 0 // TODO: Broken.
|
||||
EXPECT_TRUE(std::equal(v.crbegin(), v.crend(), ra.begin(), ra.end()));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user