[libcxx-commits] [PATCH] D124332: [libc++] Implement ranges::for_each{, _n}
Konstantin Varlamov via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Apr 27 20:15:42 PDT 2022
var-const requested changes to this revision.
var-const added a comment.
This revision now requires changes to proceed.
Looking pretty good, just a few comments.
================
Comment at: libcxx/include/__algorithm/ranges_for_each_n.h:51
+ }
+ return {std::move(__first), __func};
+ }
----------------
Nit: move `__func` as well?
================
Comment at: libcxx/include/algorithm:967
#include <__algorithm/ranges_find_if_not.h>
+#include <__algorithm/ranges_for_each.h>
+#include <__algorithm/ranges_for_each_n.h>
----------------
Please update the synopsis as well.
================
Comment at: libcxx/test/std/algorithms/alg.nonmodifying/alg.foreach/ranges.for_each.pass.cpp:11
+// UNSUPPORTED: c++03, c++11, c++14, c++17
+// UNSUPPORTED: libcpp-has-no-incomplete-ranges
+
----------------
Please add the synopsis.
================
Comment at: libcxx/test/std/algorithms/alg.nonmodifying/alg.foreach/ranges.for_each.pass.cpp:31
+static_assert(!HasForEachIt<int*, SentinelForNotSemiregular>);
+static_assert(!HasForEachIt<int*, SentinelForNotWeaklyEqualityComparableWith>);
+
----------------
Please also check the `indirectly_unary_invocable` constraint.
================
Comment at: libcxx/test/std/algorithms/alg.nonmodifying/alg.foreach/ranges.for_each.pass.cpp:45
+constexpr void test_iterator() {
+ { // simple test
+ {
----------------
Please also check with an empty range.
================
Comment at: libcxx/test/std/algorithms/alg.nonmodifying/alg.foreach/ranges.for_each.pass.cpp:49
+ int a[] = {1, 6, 3, 4};
+ std::same_as<std::ranges::for_each_result<Iter, decltype(func)>> auto ret =
+ std::ranges::for_each(Iter(a), Sent(Iter(a + 4)), func);
----------------
Nit: `decltype(auto)`.
================
Comment at: libcxx/test/std/algorithms/alg.nonmodifying/alg.foreach/ranges.for_each.pass.cpp:57
+ int i = 0;
+ ret.fun(i);
+ assert(i == 4);
----------------
Can you also check that it works when the functor is move-only (since the standard mandates that `for_each_result` should initialize the functor by moving)?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D124332/new/
https://reviews.llvm.org/D124332
More information about the libcxx-commits
mailing list