<div dir="ltr">On Thu, Jan 2, 2014 at 4:12 PM, Geoffrey Garen <span dir="ltr">&lt;<a href="mailto:ggaren@apple.com" target="_blank">ggaren@apple.com</a>&gt;</span> wrote:<div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">


I think an appropriate style guideline for “auto” would say something like:<br>
<br>
- Use “auto&quot; to declare a disgusting templated iterator type in a loop<br>
- Use “auto… -&gt;&quot; to define a template-dependent return type in a class template<br>
- In all other cases, use an explicit type declaration<br>
<br>
Thoughts?<br></blockquote><div><br></div><div>I support this.</div><div><br></div><div><br></div><div>On Thu, Jan 2, 2014 at 5:55 PM, Brent Fulgham <span dir="ltr">&lt;<a href="mailto:bfulgham@apple.com" target="_blank">bfulgham@apple.com</a>&gt;</span> wrote:<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div style="word-wrap:break-word"><div><div><div>Coming back to your earlier example:</div><br><blockquote type="cite"><div style="font-family:Helvetica;font-size:12px"><div>    auto newSize = optimalSize();</div><div dir="auto">

vs:</div></div></blockquote><blockquote type="cite"><div style="font-family:Helvetica;font-size:12px"><div dir="auto">    CGSize newSize = optimalSize();</div></div></blockquote><br></div><div>If I understand your argument, you feel that the explicit CGSize declaration helps the reader because it makes the return value of optimalSize() explicit.</div>

</div></div></blockquote><div><br></div><div>It also clarifies that newSize is, indeed, CGSize.  It&#39;s often useful to clarify the type of a local variable.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div style="word-wrap:break-word"><div><div>However, that declaration is only stating the type that the author *thinks* optimalSize() returns.  There is nothing to guarantee that optimalSize() returns a CGSize; only that it returns something that the compiler can turn into a CGSize through some set of casts. </div>

</div></div></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word">

<div><div> </div></div></div></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word">

<div><div>The code stating CGSize could have been correct at one point, but the return type of optimalSize might have been changed to some similar type without anyone noticing.</div></div></div></blockquote><div><br></div>

<div>This is why we have the following style guideline:</div><div><a href="https://www.webkit.org/coding/coding-style.html#classes-explicit">https://www.webkit.org/coding/coding-style.html#classes-explicit</a><br></div><div>

&quot;Use a constructor to do an implicit conversion when the argument is reasonably thought of as a type conversion and the type conversion is fast. Otherwise, use the explicit keyword or a function returning the type. This only applies to single argument constructors.&quot;<br>

</div><div><br></div><div>Having said that, I can see there could be cases where &quot;auto&quot; is more appropriate because we want to match the type of whatever function we&#39;re calling e.g. inside a template.</div>
</div>
<div><br></div><div>- R. Niwa</div><div><br></div></div></div></div>