Skip to content

Commit f0625ca

Browse files
Implement LWG-3947 Unexpected constraints on adjacent_transform_view::base() (#4195)
1 parent 06d2966 commit f0625ca

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

stl/inc/ranges

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9614,7 +9614,7 @@ namespace ranges {
96149614
: _Func(in_place, _STD move(_Func_)), _Inner(_STD move(_Range_)) {}
96159615

96169616
_NODISCARD constexpr _Vw base() const& noexcept(noexcept(_Inner.base())) // strengthened
9617-
requires copy_constructible<_Inner_view>
9617+
requires copy_constructible<_Vw>
96189618
{
96199619
return _Inner.base();
96209620
}

tests/std/tests/P2321R2_views_adjacent_transform/test.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <array>
66
#include <cassert>
77
#include <forward_list>
8+
#include <functional>
89
#include <ranges>
910
#include <span>
1011
#include <tuple>
@@ -968,6 +969,23 @@ int main() {
968969
test_one<3>(span<const int>{}, to_float, span<float>{});
969970
}
970971

972+
{ // LWG-3947 Unexpected constraints on adjacent_transform_view::base()
973+
struct weird_span : span<int>, ranges::view_base {
974+
weird_span() = default;
975+
weird_span(const weird_span&) = default;
976+
weird_span(weird_span&) = delete;
977+
978+
weird_span& operator=(const weird_span&) = default;
979+
};
980+
STATIC_ASSERT(!copy_constructible<weird_span>);
981+
982+
using weird_adjacent_transform_view = ranges::adjacent_transform_view<weird_span, ranges::equal_to, 2>;
983+
STATIC_ASSERT(!CanMemberBase<weird_adjacent_transform_view&>);
984+
STATIC_ASSERT(!CanMemberBase<const weird_adjacent_transform_view&>);
985+
STATIC_ASSERT(!CanMemberBase<const weird_adjacent_transform_view>);
986+
STATIC_ASSERT(CanMemberBase<weird_adjacent_transform_view>);
987+
}
988+
971989
STATIC_ASSERT((instantiation_test(), true));
972990
instantiation_test();
973991
}

0 commit comments

Comments
 (0)