Hi!

On Sun, Oct 28, 2012 at 12:27:40PM +0100, Paolo Carlini wrote:
> --- gcc/cp/parser.c   (revision 192887)
> +++ gcc/cp/parser.c   (working copy)
> @@ -12655,9 +12655,8 @@ cp_parser_template_id (cp_parser *parser,
>        /* Otherwise, emit an error about the invalid digraph, but continue
>        parsing because we got our argument list.  In C++11 do not emit
>        any error, per 2.5/3.  */

Shouldn't the "In C++11 do not emit"... sentence be removed from the comment
as well?

> -      if (cxx_dialect < cxx0x
> -       && permerror (next_token->location,
> -                     "%<<::%> cannot begin a template-argument list"))
> +      if (permerror (next_token->location,
> +                  "%<<::%> cannot begin a template-argument list"))
>       {
>         static bool hint = false;
>         inform (next_token->location,

> --- libcpp/lex.c      (revision 192887)
> +++ libcpp/lex.c      (working copy)
> @@ -2291,6 +2291,25 @@ _cpp_lex_direct (cpp_reader *pfile)
>         if (*buffer->cur == ':')
>           {
>             buffer->cur++;
> +
> +           /* C++11 - 2.5 p3, bullet 2.  */
> +           if (CPP_OPTION (pfile, cplusplus)
> +               && (CPP_OPTION (pfile, lang) == CLK_CXX11
> +                   || CPP_OPTION (pfile, lang) == CLK_GNUCXX11))
> +             {
> +               if (*buffer->cur == ':')
> +                 {
> +                   buffer->cur++;
> +                   if (*buffer->cur != ':' && *buffer->cur != '>')
> +                     {
> +                       --buffer->cur;
> +                       --buffer->cur;
> +                       break;
> +                     }
> +                   --buffer->cur;

I'd say way too many ++/-- above.  I'd write it as:

-             buffer->cur++;
+
+             /* C++11 - 2.5 p3, bullet 2.  */
+             if (CPP_OPTION (pfile, cplusplus)
+                 && (CPP_OPTION (pfile, lang) == CLK_CXX11
+                     || CPP_OPTION (pfile, lang) == CLK_GNUCXX11)
+                 && buffer->cur[1] == ':'
+                 && buffer->cur[2] != ':' && buffer->cur[2] != '>')
+               break;
+
+             buffer->cur++;

        Jakub

Reply via email to