Skip to content

Commit 9be193b

Browse files
committed
[libc++] [ranges] Finish ADL-proofing ranges::data.
This should have been part of D116239.
1 parent 4163f61 commit 9be193b

File tree

7 files changed

+11
-0
lines changed

7 files changed

+11
-0
lines changed

libcxx/include/__ranges/data.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#ifndef _LIBCPP___RANGES_DATA_H
1010
#define _LIBCPP___RANGES_DATA_H
1111

12+
#include <__concepts/class_or_enum.h>
1213
#include <__config>
1314
#include <__iterator/concepts.h>
1415
#include <__iterator/iterator_traits.h>
@@ -35,6 +36,7 @@ namespace __data {
3536
template <class _Tp>
3637
concept __member_data =
3738
__can_borrow<_Tp> &&
39+
__workaround_52970<_Tp> &&
3840
requires(_Tp&& __t) {
3941
{ _LIBCPP_AUTO_CAST(__t.data()) } -> __ptr_to_object;
4042
};

libcxx/test/std/ranges/range.access/begin.pass.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,9 @@ static_assert(noexcept(std::ranges::cbegin(brar)));
307307
struct Incomplete;
308308
template<class T> struct Holder { T t; };
309309
static_assert(!std::is_invocable_v<RangeBeginT, Holder<Incomplete>*>);
310+
static_assert(!std::is_invocable_v<RangeBeginT, Holder<Incomplete>*&>);
310311
static_assert(!std::is_invocable_v<RangeCBeginT, Holder<Incomplete>*>);
312+
static_assert(!std::is_invocable_v<RangeCBeginT, Holder<Incomplete>*&>);
311313

312314
int main(int, char**) {
313315
static_assert(testReturnTypes());

libcxx/test/std/ranges/range.access/data.pass.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,12 +210,14 @@ constexpr bool testViaRangesBegin() {
210210
struct Incomplete;
211211
template<class T> struct Holder { T t; };
212212
static_assert(!std::is_invocable_v<RangeDataT, Holder<Incomplete>*>);
213+
static_assert(!std::is_invocable_v<RangeDataT, Holder<Incomplete>*&>);
213214

214215
struct RandomButNotContiguous {
215216
random_access_iterator<int*> begin() const;
216217
random_access_iterator<int*> end() const;
217218
};
218219
static_assert(!std::is_invocable_v<RangeDataT, RandomButNotContiguous>);
220+
static_assert(!std::is_invocable_v<RangeDataT, RandomButNotContiguous&>);
219221

220222
int main(int, char**) {
221223
static_assert(testReturnTypes());

libcxx/test/std/ranges/range.access/empty.pass.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ constexpr bool testBeginEqualsEnd() {
172172
struct Incomplete;
173173
template<class T> struct Holder { T t; };
174174
static_assert(!std::is_invocable_v<RangeEmptyT, Holder<Incomplete>*>);
175+
static_assert(!std::is_invocable_v<RangeEmptyT, Holder<Incomplete>*&>);
175176

176177
int main(int, char**) {
177178
testEmptyMember();

libcxx/test/std/ranges/range.access/end.pass.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,9 @@ static_assert(noexcept(std::ranges::cend(erar)));
357357
struct Incomplete;
358358
template<class T> struct Holder { T t; };
359359
static_assert(!std::is_invocable_v<RangeEndT, Holder<Incomplete>*>);
360+
static_assert(!std::is_invocable_v<RangeEndT, Holder<Incomplete>*&>);
360361
static_assert(!std::is_invocable_v<RangeCEndT, Holder<Incomplete>*>);
362+
static_assert(!std::is_invocable_v<RangeCEndT, Holder<Incomplete>*&>);
361363

362364
int main(int, char**) {
363365
static_assert(testReturnTypes());

libcxx/test/std/ranges/range.access/size.pass.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@ constexpr bool testRanges() {
318318
struct Incomplete;
319319
template<class T> struct Holder { T t; };
320320
static_assert(!std::is_invocable_v<RangeSizeT, Holder<Incomplete>*>);
321+
static_assert(!std::is_invocable_v<RangeSizeT, Holder<Incomplete>*&>);
321322

322323
int main(int, char**) {
323324
testArrayType();

libcxx/test/std/ranges/range.access/ssize.pass.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ constexpr bool test() {
8282
struct Incomplete;
8383
template<class T> struct Holder { T t; };
8484
static_assert(!std::is_invocable_v<RangeSSizeT, Holder<Incomplete>*>);
85+
static_assert(!std::is_invocable_v<RangeSSizeT, Holder<Incomplete>*&>);
8586

8687
int main(int, char**) {
8788
test();

0 commit comments

Comments
 (0)