[PATCH] Fix parsing comma in default arguments.
Eli Friedman
eli.friedman at gmail.com
Thu Jun 13 16:30:22 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.
>
>
> > > Also a template argument can contains = for example in this case:
> > > struct S {constexpr S(){}; constexpr int operator=(int) const {return
> > > 5;}};
> > > template <int> struct A {};
> > > constexpr S s;
> > > A<s=4> a;
> >
> > This is ill-formed.
>
> Why?
> the operator= is a constexpr
It isn't a question of what operator= resolves to; the issue is that the
grammar doesn't allow an '=' in that spot. See [gram.expr].
-Eli
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130613/fc0d16df/attachment.html>
More information about the cfe-commits
mailing list