Hi,
On 06/05/2013 02:53 PM, Jason Merrill wrote:
On 06/04/2013 08:34 PM, Paolo Carlini wrote:
/* After seeing a decl-specifier-seq, if the next token is not a
- "(", there is no possibility that the code is a valid
+ "(" nor '...', there is no possibility that the code is a valid
expression. Therefore, if parsing tentatively, we commit at
this point. */
clearly in the case at issue of decl-specifier-seq followed by ellipsis
we may be parsing a perfectly valid declaration.
Yes, but not an expression, which is why we are committing there: we
know it *has* to be a declaration.
I see, I didn't notice the reference to *expressions* in the comment.
The non-variadic case should hit that commit, so your change doesn't
seem to make the variadic case more consistent.
But the non-variadic case does *not* hit the commit, because is handled
above:
/* If the next token is a `)', `,', `=', `>', or `...', then there
is no declarator. However, when variadic templates are enabled,
there may be a declarator following `...'. */
if (token->type == CPP_CLOSE_PAREN
|| token->type == CPP_COMMA
|| token->type == CPP_EQ
|| token->type == CPP_GREATER)
{
declarator = NULL;
if (parenthesized_p)
*parenthesized_p = false;
}
Thus it seems to me that the variadic case should also somehow not-hit
the commit, do you agree?
Paolo.