[cfe-commits] Handle missing 'typename' in function template definitions

Richard Smith richard at metafoo.co.uk
Tue May 15 18:12:11 PDT 2012


Hi,

The attached patch allows Clang to recover better from a missing 'typename'
keyword in a function template definition:

<stdin>:1:29: error: missing 'typename' prior to dependent type name
'T::type'
template<typename T> void f(T::type) {}
                            ^~~~~~~
                            typename

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
{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).

Does this seem like a reasonable approach?

Thanks!
Richard
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120515/fe07d693/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: missing-typename.diff
Type: application/octet-stream
Size: 10533 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120515/fe07d693/attachment.obj>


More information about the cfe-commits mailing list