Skip to content

Commit e06ca31

Browse files
committed
[libc++] Canonicalize the ranges results and their tests
Reviewed By: var-const, Mordante, #libc, ldionne Spies: ldionne, libcxx-commits Differential Revision: https://reviews.llvm.org/D121435
1 parent d369dd1 commit e06ca31

18 files changed

+235
-263
lines changed

libcxx/include/__algorithm/in_fun_result.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
_LIBCPP_BEGIN_NAMESPACE_STD
2222

23-
#if _LIBCPP_STD_VER > 17
23+
#if _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES)
2424

2525
namespace ranges {
2626
template <class _Ip, class _Fp>
@@ -42,7 +42,7 @@ struct in_fun_result {
4242
};
4343
} // namespace ranges
4444

45-
#endif // _LIBCPP_STD_VER > 17
45+
#endif // _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES)
4646

4747
_LIBCPP_END_NAMESPACE_STD
4848

libcxx/include/__algorithm/in_in_out_result.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ struct in_in_out_result {
4141
requires convertible_to<_I1, _II1> && convertible_to<_I2, _II2> && convertible_to<_O1, _OO1>
4242
_LIBCPP_HIDE_FROM_ABI constexpr
4343
operator in_in_out_result<_II1, _II2, _OO1>() && {
44-
return {_VSTD::move(in1), _VSTD::move(in2), _VSTD::move(out)};
44+
return {std::move(in1), std::move(in2), std::move(out)};
4545
}
4646
};
4747

libcxx/include/__algorithm/in_in_result.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
_LIBCPP_BEGIN_NAMESPACE_STD
2222

23-
#if _LIBCPP_STD_VER > 17
23+
#if _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES)
2424

2525
namespace ranges {
2626

@@ -39,12 +39,14 @@ struct in_in_result {
3939
template <class _II1, class _II2>
4040
requires convertible_to<_I1, _II1> && convertible_to<_I2, _II2>
4141
_LIBCPP_HIDE_FROM_ABI constexpr
42-
operator in_in_result<_II1, _II2>() && { return {_VSTD::move(in1), _VSTD::move(in2)}; }
42+
operator in_in_result<_II1, _II2>() && {
43+
return {std::move(in1), std::move(in2)};
44+
}
4345
};
4446

4547
} // namespace ranges
4648

47-
#endif // _LIBCPP_STD_VER > 17
49+
#endif // _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES)
4850

4951
_LIBCPP_END_NAMESPACE_STD
5052

libcxx/include/__algorithm/in_out_out_result.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
_LIBCPP_BEGIN_NAMESPACE_STD
2222

23-
#if _LIBCPP_STD_VER > 17
23+
#if _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES)
2424

2525
namespace ranges {
2626
template <class _I1, class _O1, class _O2>
@@ -40,12 +40,12 @@ struct in_out_out_result {
4040
requires convertible_to<_I1, _II1> && convertible_to<_O1, _OO1> && convertible_to<_O2, _OO2>
4141
_LIBCPP_HIDE_FROM_ABI constexpr
4242
operator in_out_out_result<_II1, _OO1, _OO2>() && {
43-
return {_VSTD::move(in), _VSTD::move(out1), _VSTD::move(out2)};
43+
return {std::move(in), std::move(out1), std::move(out2)};
4444
}
4545
};
4646
} // namespace ranges
4747

48-
#endif // _LIBCPP_STD_VER > 17
48+
#endif // _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES)
4949

5050
_LIBCPP_END_NAMESPACE_STD
5151

libcxx/include/__algorithm/in_out_result.h

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,24 +24,23 @@ _LIBCPP_BEGIN_NAMESPACE_STD
2424

2525
namespace ranges {
2626

27-
template<class _InputIterator, class _OutputIterator>
27+
template<class _I1, class _O1>
2828
struct in_out_result {
29-
_LIBCPP_NO_UNIQUE_ADDRESS _InputIterator in;
30-
_LIBCPP_NO_UNIQUE_ADDRESS _OutputIterator out;
29+
_LIBCPP_NO_UNIQUE_ADDRESS _I1 in;
30+
_LIBCPP_NO_UNIQUE_ADDRESS _O1 out;
3131

32-
template <class _InputIterator2, class _OutputIterator2>
33-
requires convertible_to<const _InputIterator&, _InputIterator2> && convertible_to<const _OutputIterator&,
34-
_OutputIterator2>
32+
template <class _I2, class _O2>
33+
requires convertible_to<const _I1&, _I2> && convertible_to<const _O1&, _O2>
3534
_LIBCPP_HIDE_FROM_ABI
36-
constexpr operator in_out_result<_InputIterator2, _OutputIterator2>() const & {
35+
constexpr operator in_out_result<_I2, _O2>() const & {
3736
return {in, out};
3837
}
3938

40-
template <class _InputIterator2, class _OutputIterator2>
41-
requires convertible_to<_InputIterator, _InputIterator2> && convertible_to<_OutputIterator, _OutputIterator2>
39+
template <class _I2, class _O2>
40+
requires convertible_to<_I1, _I2> && convertible_to<_O1, _O2>
4241
_LIBCPP_HIDE_FROM_ABI
43-
constexpr operator in_out_result<_InputIterator2, _OutputIterator2>() && {
44-
return {_VSTD::move(in), _VSTD::move(out)};
42+
constexpr operator in_out_result<_I2, _O2>() && {
43+
return {std::move(in), std::move(out)};
4544
}
4645
};
4746

libcxx/include/__algorithm/min_max_result.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,4 @@ _LIBCPP_END_NAMESPACE_STD
5353

5454
_LIBCPP_POP_MACROS
5555

56-
#endif
56+
#endif // _LIBCPP___ALGORITHM_MIN_MAX_RESULT_H

libcxx/include/__algorithm/ranges_mismatch.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
_LIBCPP_BEGIN_NAMESPACE_STD
2929

30-
#if _LIBCPP_STD_VER > 17
30+
#if _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES)
3131

3232
namespace ranges {
3333

@@ -78,7 +78,7 @@ inline namespace __cpo {
7878
} // namespace __cpo
7979
} // namespace ranges
8080

81-
#endif // _LIBCPP_STD_VER > 17
81+
#endif // _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES)
8282

8383
_LIBCPP_END_NAMESPACE_STD
8484

libcxx/include/__algorithm/ranges_swap_ranges.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
# pragma GCC system_header
2323
#endif
2424

25-
#if _LIBCPP_STD_VER > 17
25+
#if _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES)
2626

2727
_LIBCPP_BEGIN_NAMESPACE_STD
2828

@@ -64,6 +64,6 @@ inline namespace __cpo {
6464

6565
_LIBCPP_END_NAMESPACE_STD
6666

67-
#endif // _LIBCPP_STD_VER > 17
67+
#endif // _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES)
6868

6969
#endif // _LIBCPP___ALGORITHM_RANGES_SWAP_RANGES_H

libcxx/test/std/algorithms/algorithms.results/in_found_result.pass.cpp

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,17 @@
1818

1919
#include "MoveOnly.h"
2020

21-
template <class T>
22-
struct ConvertibleFrom {
23-
constexpr ConvertibleFrom(T c) : content{c} {}
24-
T content;
25-
};
26-
2721
struct A {
2822
explicit A(int);
2923
};
24+
// no implicit conversion
3025
static_assert(!std::is_constructible_v<std::ranges::in_found_result<A>, std::ranges::in_found_result<int>>);
3126

3227
struct B {
3328
B(const int&);
3429
B(int&&);
3530
};
31+
// implicit conversion
3632
static_assert(std::is_constructible_v<std::ranges::in_found_result<B>, std::ranges::in_found_result<int>>);
3733
static_assert(std::is_constructible_v<std::ranges::in_found_result<B>, std::ranges::in_found_result<int>&>);
3834
static_assert(std::is_constructible_v<std::ranges::in_found_result<B>, const std::ranges::in_found_result<int>>);
@@ -43,25 +39,39 @@ struct C {
4339
};
4440
static_assert(!std::is_constructible_v<std::ranges::in_found_result<C>, std::ranges::in_found_result<int>&>);
4541

42+
// has to be convertible via const&
4643
static_assert(std::is_convertible_v<std::ranges::in_found_result<int>&, std::ranges::in_found_result<long>>);
4744
static_assert(std::is_convertible_v<const std::ranges::in_found_result<int>&, std::ranges::in_found_result<long>>);
4845
static_assert(std::is_convertible_v<std::ranges::in_found_result<int>&&, std::ranges::in_found_result<long>>);
4946
static_assert(std::is_convertible_v<const std::ranges::in_found_result<int>&&, std::ranges::in_found_result<long>>);
5047

48+
// should be move constructible
49+
static_assert(std::is_move_constructible_v<std::ranges::in_found_result<MoveOnly>>);
50+
51+
// should not be copy constructible
52+
static_assert(!std::is_copy_constructible_v<std::ranges::in_found_result<MoveOnly>>);
53+
5154
struct NotConvertible {};
55+
// conversions should not work if there is no conversion
5256
static_assert(!std::is_convertible_v<std::ranges::in_found_result<NotConvertible>, std::ranges::in_found_result<int>>);
5357

5458
static_assert(std::is_same_v<decltype(std::ranges::in_found_result<int>::in), int>);
5559
static_assert(std::is_same_v<decltype(std::ranges::in_found_result<int>::found), bool>);
5660

61+
template <class T>
62+
struct ConvertibleFrom {
63+
constexpr ConvertibleFrom(T c) : content{c} {}
64+
T content;
65+
};
66+
5767
constexpr bool test() {
5868
{
5969
std::ranges::in_found_result<double> res{10, true};
6070
assert(res.in == 10);
6171
assert(res.found == true);
6272
std::ranges::in_found_result<ConvertibleFrom<int>> res2 = res;
6373
assert(res2.in.content == 10);
64-
assert(res2.found);
74+
assert(res2.found == true);
6575
}
6676
{
6777
std::ranges::in_found_result<MoveOnly> res{MoveOnly{}, false};

libcxx/test/std/algorithms/algorithms.results/in_fun_result.pass.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ static_assert(std::is_constructible_v<std::ranges::in_fun_result<B, B>, const st
3737
struct C {
3838
C(int&);
3939
};
40-
// has to be convertible via const&
4140
static_assert(!std::is_constructible_v<std::ranges::in_fun_result<C, C>, std::ranges::in_fun_result<int, int>&>);
4241

42+
// has to be convertible via const&
4343
static_assert(std::is_convertible_v<std::ranges::in_fun_result<int, int>&, std::ranges::in_fun_result<long, long>>);
4444
static_assert(std::is_convertible_v<const std::ranges::in_fun_result<int, int>&, std::ranges::in_fun_result<long, long>>);
4545
static_assert(std::is_convertible_v<std::ranges::in_fun_result<int, int>&&, std::ranges::in_fun_result<long, long>>);
@@ -55,10 +55,8 @@ static_assert(!std::is_copy_constructible_v<std::ranges::in_fun_result<int, Move
5555

5656
struct NotConvertible {};
5757
// conversions should not work if there is no conversion
58-
static_assert(!std::is_convertible_v<std::ranges::in_fun_result<NotConvertible, int>,
59-
std::ranges::in_fun_result<int, int>>);
60-
static_assert(!std::is_convertible_v<std::ranges::in_fun_result<int, NotConvertible>,
61-
std::ranges::in_fun_result<int, int>>);
58+
static_assert(!std::is_convertible_v<std::ranges::in_fun_result<NotConvertible, int>, std::ranges::in_fun_result<int, int>>);
59+
static_assert(!std::is_convertible_v<std::ranges::in_fun_result<int, NotConvertible>, std::ranges::in_fun_result<int, int>>);
6260

6361
template <class T>
6462
struct ConvertibleFrom {

libcxx/test/std/algorithms/algorithms.results/in_in_out_result.pass.cpp

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,17 @@
1818

1919
#include "MoveOnly.h"
2020

21-
template <class T>
22-
struct ConvertibleFrom {
23-
constexpr ConvertibleFrom(T c) : content{c} {}
24-
T content;
25-
};
26-
2721
struct A {
2822
explicit A(int);
2923
};
30-
// conversion is not implicit
24+
// no implicit conversion
3125
static_assert(!std::is_constructible_v<std::ranges::in_in_out_result<A, A, A>,
3226
std::ranges::in_in_out_result<int, int, int>>);
3327

3428
struct B {
3529
B(int);
3630
};
31+
// implicit conversion
3732
static_assert(std::is_constructible_v<std::ranges::in_in_out_result<B, B, B>, std::ranges::in_in_out_result<int, int, int>>);
3833
static_assert(std::is_constructible_v<std::ranges::in_in_out_result<B, B, B>, std::ranges::in_in_out_result<int, int, int>&>);
3934
static_assert(std::is_constructible_v<std::ranges::in_in_out_result<B, B, B>, const std::ranges::in_in_out_result<int, int, int>>);
@@ -44,34 +39,34 @@ struct C {
4439
};
4540
static_assert(!std::is_constructible_v<std::ranges::in_in_out_result<C, C, C>, std::ranges::in_in_out_result<int, int, int>&>);
4641

47-
static_assert(std::is_convertible_v<std::ranges::in_in_out_result<int, int, int>&,
48-
std::ranges::in_in_out_result<long, long, long>>);
49-
static_assert(std::is_convertible_v<const std::ranges::in_in_out_result<int, int, int>&,
50-
std::ranges::in_in_out_result<long, long, long>>);
51-
static_assert(std::is_convertible_v<std::ranges::in_in_out_result<int, int, int>&&,
52-
std::ranges::in_in_out_result<long, long, long>>);
53-
static_assert(std::is_convertible_v<const std::ranges::in_in_out_result<int, int, int>&&,
54-
std::ranges::in_in_out_result<long, long, long>>);
55-
56-
struct NotConvertible {};
57-
static_assert(!std::is_convertible_v<std::ranges::in_in_out_result<NotConvertible, int, int>,
58-
std::ranges::in_in_out_result<int, int, int>>);
59-
static_assert(!std::is_convertible_v<std::ranges::in_in_out_result<int, NotConvertible, int>,
60-
std::ranges::in_in_out_result<int, int, int>>);
61-
static_assert(!std::is_convertible_v<std::ranges::in_in_out_result<int, int, NotConvertible>,
62-
std::ranges::in_in_out_result<int, int, int>>);
63-
64-
static_assert(std::is_constructible_v<std::ranges::in_in_out_result<MoveOnly, MoveOnly, MoveOnly>,
65-
std::ranges::in_in_out_result<int, int, int>&>);
42+
// has to be convertible via const&
43+
static_assert(std::is_convertible_v<std::ranges::in_in_out_result<int, int, int>&, std::ranges::in_in_out_result<long, long, long>>);
44+
static_assert(std::is_convertible_v<const std::ranges::in_in_out_result<int, int, int>&, std::ranges::in_in_out_result<long, long, long>>);
45+
static_assert(std::is_convertible_v<std::ranges::in_in_out_result<int, int, int>&&, std::ranges::in_in_out_result<long, long, long>>);
46+
static_assert(std::is_convertible_v<const std::ranges::in_in_out_result<int, int, int>&&, std::ranges::in_in_out_result<long, long, long>>);
6647

48+
// should be move constructible
6749
static_assert(std::is_move_constructible_v<std::ranges::in_in_out_result<MoveOnly, int, int>>);
6850
static_assert(std::is_move_constructible_v<std::ranges::in_in_out_result<int, MoveOnly, int>>);
6951
static_assert(std::is_move_constructible_v<std::ranges::in_in_out_result<int, int, MoveOnly>>);
7052

53+
// should not be copy constructible
7154
static_assert(!std::is_copy_constructible_v<std::ranges::in_in_out_result<MoveOnly, int, int>>);
7255
static_assert(!std::is_copy_constructible_v<std::ranges::in_in_out_result<int, MoveOnly, int>>);
7356
static_assert(!std::is_copy_constructible_v<std::ranges::in_in_out_result<int, int, MoveOnly>>);
7457

58+
struct NotConvertible {};
59+
// conversions should not work if there is no conversion
60+
static_assert(!std::is_convertible_v<std::ranges::in_in_out_result<NotConvertible, int, int>, std::ranges::in_in_out_result<int, int, int>>);
61+
static_assert(!std::is_convertible_v<std::ranges::in_in_out_result<int, NotConvertible, int>, std::ranges::in_in_out_result<int, int, int>>);
62+
static_assert(!std::is_convertible_v<std::ranges::in_in_out_result<int, int, NotConvertible>, std::ranges::in_in_out_result<int, int, int>>);
63+
64+
template <class T>
65+
struct ConvertibleFrom {
66+
constexpr ConvertibleFrom(T c) : content{c} {}
67+
T content;
68+
};
69+
7570
constexpr bool test() {
7671
{
7772
std::ranges::in_in_out_result<int, double, float> res{10, 0., 1.f};

0 commit comments

Comments
 (0)