libstdc++: Implement LWG 3481 change to ranges::viewable_range
libstdc++-v3/ChangeLog: * include/bits/ranges_base.h (viewable_range): Adjust as per LWG 3481. * testsuite/std/ranges/adaptors/all.cc (test07): New test.
This commit is contained in:
parent
0fac85a24f
commit
a2c2dcc6ca
2 changed files with 17 additions and 1 deletions
|
@ -688,7 +688,8 @@ namespace ranges
|
|||
/// A range which can be safely converted to a view.
|
||||
template<typename _Tp>
|
||||
concept viewable_range = range<_Tp>
|
||||
&& (borrowed_range<_Tp> || view<remove_cvref_t<_Tp>>);
|
||||
&& ((view<remove_cvref_t<_Tp>> && constructible_from<remove_cvref_t<_Tp>, _Tp>)
|
||||
|| (!view<remove_cvref_t<_Tp>> && borrowed_range<_Tp>));
|
||||
|
||||
// [range.iter.ops] range iterator operations
|
||||
|
||||
|
|
|
@ -159,6 +159,20 @@ test06()
|
|||
static_assert(!noexcept(views::all(BorrowedRange<false, false>(x))));
|
||||
}
|
||||
|
||||
void
|
||||
test07()
|
||||
{
|
||||
// LWG 3481
|
||||
struct view_t : ranges::empty_view<int> { // move-only view
|
||||
view_t(const view_t&) = delete;
|
||||
view_t(view_t&&) = default;
|
||||
view_t& operator=(const view_t&) = delete;
|
||||
view_t& operator=(view_t&&) = default;
|
||||
};
|
||||
static_assert(std::movable<view_t> && !std::copyable<view_t>);
|
||||
static_assert(!ranges::viewable_range<view_t&>);
|
||||
}
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
|
@ -168,4 +182,5 @@ main()
|
|||
static_assert(test04());
|
||||
test05();
|
||||
test06();
|
||||
test07();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue