Okay, if I replace auto, then you know that employee is of type &quot;EmployeeRec&quot;.<p>Happy? Of course not. That still tells you basically nothing. Surely it does not tell you what the store function does (I argue &#x27;storeXXX&#x27; is generally a bad name, the point is to use a good name for functions, I just threw boilerplate there).<p>Comments plus good names will tell you what is going on. Replacing &#x27;auto&#x27; with &#x27;std::vector&lt;EmployeeRec&gt;&#x27; for the most part, doesn&#x27;t.<p>I&#x27;m not being dogmatic. If having the type there is important, then of course use the type, not auto. But it seems that everyone who writes a rant about auto shows us code with no comments, and terrible, meaningless variable and function names. Get that part right, and then, if you are still puzzled, and the code isn&#x27;t meant to be generic, sure, put the type in. Why not?<p>Somehow I manage to write and read tons of dynamic code that has no types whatsoever. I agree, sometimes I would like a type there, and that is a perfect time to not use auto. But in general, we are trying to write code at a higher level. I mostly don&#x27;t want to write, or think about<p><pre><code>    for (std::my_vector&lt;some_long_type&gt; i = blah.begin(); 
</code></pre>
Sometimes I do, and in those cases I&#x27;ll write it that way.