Work around GCC ICE related to v2::container_interface::cr{begin,end}.

This commit is contained in:
Zach Laine
2019-08-20 20:25:48 -05:00
parent 8b6d352e3e
commit bb5e94b16c
2 changed files with 4 additions and 9 deletions

View File

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

View File

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