<div dir="ltr">I had a pair originally, but I found it more intuitive to refer to them in loops with the names "Index" and "Value" rather than "first" and "second".</div><br><div class="gmail_quote"><div dir="ltr">On Thu, Sep 29, 2016 at 12:05 PM Mehdi Amini <<a href="mailto:mehdi.amini@apple.com">mehdi.amini@apple.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br class="gmail_msg">
> On Sep 29, 2016, at 11:23 AM, Zachary Turner <<a href="mailto:zturner@google.com" class="gmail_msg" target="_blank">zturner@google.com</a>> wrote:<br class="gmail_msg">
><br class="gmail_msg">
> I frequently find myself resorting to index based enumeration because ranged based fors do not allow you to access the index.<br class="gmail_msg">
<br class="gmail_msg">
Same here!!<br class="gmail_msg">
<br class="gmail_msg">
>   With llvm::enumerate(), you can write something like this:<br class="gmail_msg">
><br class="gmail_msg">
> for (auto X : enumerate(my_container)) {<br class="gmail_msg">
>   if (X.Index == 1)<br class="gmail_msg">
>     continue;<br class="gmail_msg">
>   printf("%d", X.Value);<br class="gmail_msg">
> }<br class="gmail_msg">
><br class="gmail_msg">
> It handles both const and non-const containers, so that for non-const containers you can modify the underlying sequence item (e.g. the `Value` member of the returned enumerator is a reference).<br class="gmail_msg">
<br class="gmail_msg">
I like the idea :)<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
+public:<br class="gmail_msg">
+  template <typename V> struct result_pair {<br class="gmail_msg">
+    result_pair(std::size_t Index, V Value) : Index(Index), Value(Value) {}<br class="gmail_msg">
+<br class="gmail_msg">
<br class="gmail_msg">
Why not a std::pair?<br class="gmail_msg">
<br class="gmail_msg">
+    iterator &operator=(const iterator &RHS) {<br class="gmail_msg">
+      Iter = RHS;<br class="gmail_msg">
+      return *this;<br class="gmail_msg">
+    }<br class="gmail_msg">
+<br class="gmail_msg">
<br class="gmail_msg">
What about the Index here?<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
—<br class="gmail_msg">
Mehdi<br class="gmail_msg">
<br class="gmail_msg">
</blockquote></div>