You actually hit on the exact reason; your change is significantly harder to parse. C++ allows you to alias typenames and variable names, so you wouldn&#x27;t know if `int foo(T);` was a declaration of a function that take a type `T` or a function that has an implicitly typed parameter called `T` until much later in the parse. Adding auto makes it clear this is a declaration of a variable. That kind of ambiguity already exists in C++[1], but is widely regarded as one of the things that makes parsing C++ extremely hairy.<p>Interestingly, I remember hearing about this exact problem in the context of Swift&#x27;s closures; if you want type inference, you need to leave off the parens around the parameters. This is mainly done (IIRC) because it&#x27;s easier for the parser.<p>[1] <a href="http:&#x2F;&#x2F;blog.reverberate.org&#x2F;2013&#x2F;08&#x2F;parsing-c-is-literally-undecidable.html" rel="nofollow">http:&#x2F;&#x2F;blog.reverberate.org&#x2F;2013&#x2F;08&#x2F;parsing-c-is-literally-u...</a>