Hi,<div><br></div><div>The attached patch allows Clang to recover better from a missing 'typename' keyword in a function template definition:</div><div><br></div><div><div><font face="courier new, monospace"><stdin>:1:29: error: missing 'typename' prior to dependent type name 'T::type'</font></div>
<div><font face="courier new, monospace">template<typename T> void f(T::type) {}</font></div><div><font face="courier new, monospace"> ^~~~~~~</font></div><div><font face="courier new, monospace"> typename </font></div>
</div><div><br></div><div>With this patch, we carry on disambiguating past such a situation. If we can't disambiguate the declaration in some other way, the absence of 'typename' is used to infer that we have a variable declaration. I've also extended the disambiguation code to inspect the token immediately after the parameter-declaration-clause to disambiguate (in the above case, the <font face="courier new, monospace">{</font> token is used to disambiguate, and more generally we will also look for an exception-specification, ref-qualifier, cv-qualifier, etc., which cannot appear after a parenthesized initializer in a variable declaration).</div>
<div><br></div><div>Does this seem like a reasonable approach?</div><div><br></div><div>Thanks!</div><div>Richard</div>