The fundamental issue pointed out in the post is an interesting one.  It all begins with the assumption that with a language like C++, you can reason about things like performance without a lot of weird surprises.<p>Much of that reasoning begins with understanding the types involved.<p>Of course, I would argue if you wanted to complain about this, you should begin by rejecting operator overloading, which IMO is far more dangerous in this regard than the auto keyword.  At least with auto, there&#x27;s a visual indicator that something &quot;magical&quot; is going on, and if you want to really know the return type, you navigate to the function or whatever to figure out what that type is.<p>With operator overloads, code that looks totally innocuous can end up doing extremely surprising things.