On 5/4/22 11:15, Marek Polacek wrote:
On Tue, May 03, 2022 at 04:46:11PM -0400, Jason Merrill wrote:
On 5/3/22 16:43, Jakub Jelinek wrote:
On Tue, May 03, 2022 at 04:26:51PM -0400, Jason Merrill wrote:
On 5/2/22 12:19, Marek Polacek wrote:
This patch fixes an oversight whereby we treated >= as the end of
a template argument.  This causes problems in C++14, because in
cp_parser_template_argument we go different ways for C++14 and C++17:

     /* It must be a non-type argument.  In C++17 any constant-expression is
        allowed.  */
     if (cxx_dialect > cxx14)
       goto general_expr;

so in this testcase in C++14 we get "N" as the template argument but in
C++17 it is the whole "N >= 5" expression.  So in C++14 the remaining
">= 5" triggered the newly-added diagnostic.

Hmm, I think >>= is questionable as well, as it could resolve to a constexpr
operator>>=.  Seems like the two calls to

The template argument is a constant-expression and >>= can't appear non-nested
in constant-expression non-terminal, can it?

Ah, true, a constant-expression is a conditional-expression, which can't
involve an assignment operator.

So do you want me to make any changes or is the patch OK as-is?

OK.

Reply via email to