<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">
<br>
<div>
<div>On Jan 6, 2014, at 13:49 , Geoffrey Garen &lt;<a href="mailto:ggaren@apple.com">ggaren@apple.com</a>&gt; wrote:</div>
<br class="Apple-interchange-newline">
<blockquote type="cite">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">
Let me try to clarify with two more motivating examples:
<div><br>
</div>
<div>
<div>
<div>(1) Nodes.cpp:</div>
<div><br>
</div>
<div>
<div>FunctionParameters::FunctionParameters(ParameterNode* firstParameter, unsigned size)</div>
<div>&nbsp; &nbsp; : m_size(size)</div>
<div>{</div>
<div>&nbsp; &nbsp; unsigned i = 0;</div>
<div>&nbsp; &nbsp; for (ParameterNode* parameter = firstParameter; parameter; parameter = parameter-&gt;nextParam()) {</div>
<div><b>&nbsp; &nbsp; &nbsp; &nbsp; auto pattern = parameter-&gt;pattern();</b></div>
<div><b>&nbsp; &nbsp; &nbsp; &nbsp; pattern-&gt;ref();</b></div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; patterns()[i&#43;&#43;] = pattern;</div>
<div>&nbsp; &nbsp; }</div>
<div>}</div>
</div>
</div>
<div><br>
</div>
<div>If I had to describe this algorithm in English, I’d say, “Collect and retain all the [auto] from the list of parsed parameters.” I think that explanation would be stronger if “[auto]” were a concrete noun.</div>
<div><br>
</div>
<div>Does anybody prefer auto in this context? If so, why?</div>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>While I wouldn't say that I prefer auto here, it doesn't really bother me in this example. Personally, I would read that as &quot;Collect and retain all of the patterns from the list of parsed parameters&quot;, and I'd say it the same way if auto had been an explicit
 type.&nbsp;</div>
<br>
<blockquote type="cite">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">
<div>
<div>(2) ApplyStyleCommand.cpp:</div>
<div><br>
</div>
<div>
<div>&nbsp; &nbsp; auto children = elementChildren(*dummySpanAncestor);</div>
<div>&nbsp; &nbsp; for (auto child = children.begin(), end = children.end(); child != end; &#43;&#43;child) {</div>
<div><b>&nbsp; &nbsp; &nbsp; &nbsp; if (isSpanWithoutAttributesOrUnstyledStyleSpan(&amp;*child))</b></div>
<div><b>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; toRemove.append(&amp;*child);</b></div>
<div>&nbsp; &nbsp; }</div>
</div>
</div>
<div><br>
</div>
<div>I don’t understand why we’re &amp;*’ing here. That’s a surprising idiom I haven’t seen before, which I would expect to be a no-op. My first question when reading this is, “What is the type of ‘child’, such that I would need to &amp;* it?”.&nbsp;</div>
<div><br>
</div>
<div>Is this &quot;&amp;*child” obvious to everyone else?</div>
</div>
</blockquote>
<div><br>
</div>
<div>It's actually pretty obvious to me, but I've been spending a lot of time with similar iterators lately. I don't think it's that much clearer without the auro. I've definitely found this to be confusing in the codebase much before auto entered the picture.
 (In this case, I'd argue strongly for using an accessor method on the iterator or a temporary variable)</div>
<div><br>
</div>
<div>- Bem</div>
</div>
<br>
</body>
</html>