<div dir="ltr">What use case do you have for this over a range-based-for loop?</div><br><div class="gmail_quote"><div dir="ltr">On Sat, Sep 2, 2017 at 6:08 PM Keith via Phabricator via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">kpw created this revision.<br>
<br>
There are a few range based wrappers llvm provides already. They're handy and I<br>
couldn't find one for std::for_each, so I'm adding it.<br>
<br>
<br>
<a href="https://reviews.llvm.org/D37417" rel="noreferrer" target="_blank">https://reviews.llvm.org/D37417</a><br>
<br>
Files:<br>
  include/llvm/ADT/STLExtras.h<br>
  unittests/ADT/STLExtrasTest.cpp<br>
<br>
<br>
Index: unittests/ADT/STLExtrasTest.cpp<br>
===================================================================<br>
--- unittests/ADT/STLExtrasTest.cpp<br>
+++ unittests/ADT/STLExtrasTest.cpp<br>
@@ -318,4 +318,14 @@<br>
   EXPECT_EQ(7, V[3]);<br>
 }<br>
<br>
+TEST(STLExtrasTest, ForEach) {<br>
+  std::vector<std::pair<int, int>> V = {{1, 2}, {3, 4}, {5, 6}};<br>
+  std::vector<int> Evens{};<br>
+  auto BackInserter = std::back_inserter(Evens);<br>
+  for_each(V,<br>
+           [&](std::pair<int, int> Element) { BackInserter = Element.second; });<br>
+  std::vector<int> ExpectedEvens = {2, 4, 6};<br>
+  EXPECT_EQ(Evens, ExpectedEvens);<br>
+}<br>
+<br>
 }<br>
Index: include/llvm/ADT/STLExtras.h<br>
===================================================================<br>
--- include/llvm/ADT/STLExtras.h<br>
+++ include/llvm/ADT/STLExtras.h<br>
@@ -852,6 +852,13 @@<br>
   return std::find_if_not(std::begin(Range), std::end(Range), P);<br>
 }<br>
<br>
+/// Provide wrapper to std::for_each which take ranges instead of having to<br>
+/// pass begin/end explicitly.<br>
+template <typename R, typename UnaryFunction><br>
+UnaryFunction for_each(R &&Range, UnaryFunction F) {<br>
+  return std::for_each(std::begin(Range), std::end(Range), F);<br>
+}<br>
+<br>
 /// Provide wrappers to std::remove_if which take ranges instead of having to<br>
 /// pass begin/end explicitly.<br>
 template <typename R, typename UnaryPredicate><br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>