[PATCH] Fix parsing comma in default arguments.

Olivier Goffart ogoffart at kde.org
Wed Jun 19 02:46:14 PDT 2013


On Thursday 13 June 2013 17:05:04 Richard Smith wrote:
> 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!

I don't intend to do that.
That's more work than I am willing to put there.
This will only be a problem in some corner cases that were not working before 
the patche, and that is also not accepted by gcc.

-- 
Olivier



More information about the cfe-commits mailing list