[PATCH] Fix parsing comma in default arguments.

Richard Smith richard at metafoo.co.uk
Thu Jun 13 17:05:04 PDT 2013


On Thu, Jun 13, 2013 at 4:17 PM, Olivier Goffart <ogoffart at kde.org> wrote:
> On Thursday 13 June 2013 13:52:47 Richard Smith wrote:
>> That's not really acceptable, if it can lead to rejecting valid code
>> that we accept now (such as your next example).
>
> Ok, the new attached patch fixes that issue.
>
> I'm now quite happy which what (i think) we cover.
> It even report good errors when one miss a default argument (on the right
> line)
>
> What is still not working is this:
>
> template <int, int =0> struct p { const static int w = 0; };
> struct T {
>      int i = p<0,  p<a<b>::w  >::w, p<0>::*j;
>      static const int a = 1, b = 2;
> };
>
> because a and b are declare after, and the TryAnnotateCXXScopeToken will
> display error as a and b are not defined yet.
>
> But clang did not accept this code before.  And gcc also seems to have a bug
> there.

Right, you can't use TryParseDeclarator during this disambiguation,
because it assumes that it can perform name lookup. You'll need to
skip declarators manually (or at least the scope specifiers within
them).

Thank you for working on this!



More information about the cfe-commits mailing list