Skip to content

Commit 3ea34a2

Browse files
committed
Add support for rvalue-qualified begin and end to range.
1 parent e5227d6 commit 3ea34a2

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

source/containers/range.cpp

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,18 @@ import containers.has_member_size;
1111
import containers.is_iterator;
1212
import containers.is_iterator_sentinel;
1313

14+
import bounded;
15+
1416
namespace containers {
1517

1618
template<typename T>
17-
concept size_based_range = has_member_size<T> and requires(T range) {
18-
{ range.begin() } -> random_access_iterator;
19+
concept size_based_range = has_member_size<T> and requires {
20+
{ bounded::declval<T>().begin() } -> random_access_iterator;
1921
};
2022

2123
template<typename T>
22-
concept basic_range = requires(T range) {
23-
range.begin();
24-
{ range.end() } -> sentinel_for<decltype(range.begin())>;
24+
concept basic_range = requires {
25+
{ bounded::declval<T>().end() } -> sentinel_for<decltype(bounded::declval<T>().begin())>;
2526
};
2627

2728
template<typename T>
@@ -47,12 +48,26 @@ struct begin_and_end {
4748
};
4849
static_assert(all_qualifications_are_ranges<begin_and_end>);
4950

51+
struct begin_and_end_rvalue {
52+
auto begin() && -> int *;
53+
auto end() && -> int *;
54+
};
55+
static_assert(containers::range<begin_and_end_rvalue>);
56+
static_assert(!containers::range<begin_and_end_rvalue const &>);
57+
5058
struct begin_and_size {
5159
auto begin() const -> int *;
5260
auto size() const -> int;
5361
};
5462
static_assert(all_qualifications_are_ranges<begin_and_size>);
5563

64+
struct begin_and_size_rvalue {
65+
auto begin() && -> int *;
66+
auto size() const -> int;
67+
};
68+
static_assert(containers::range<begin_and_size_rvalue>);
69+
static_assert(!containers::range<begin_and_size_rvalue const &>);
70+
5671
struct before_begin_and_end {
5772
auto before_begin() const -> int *;
5873
auto end() const -> int *;

0 commit comments

Comments
 (0)