https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114934

            Bug ID: 114934
           Summary: Error message for expected unqualified-id could be
                    improved
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hewillk at gmail dot com
  Target Milestone: ---

Suppose I misspelled an extra colon for the namespace
(https://godbolt.org/z/q3b7531q3):

#include <tuple>
#include <string>

using Tuple = std::tuple<std:::string, int>;

GCC gives:

<source>:4:43: error: template argument 1 is invalid
    4 | using Tuple = std::tuple<std:::string, int>;
      |                                           ^

Although it is not stated why it is invalid, it is still acceptable.

Clang gives:

<source>:4:31: error: expected unqualified-id
    4 | using Tuple = std::tuple<std:::string, int>;
      |                               ^

It correctly points out the location of the issue which is nice.

However, I changed it to the following (https://godbolt.org/z/zfoqeoxE3):

#include <tuple>
#include <string>

using Pair = std::pair<std:::string, int>;

GCC will give:

<source>:4:41: error: wrong number of template arguments (1, should be 2)
    4 | using Pair = std::pair<std:::string, int>;
      |          

This is unkind because it doesn't indicate which one is invalid, but rather the
*wrong number* of arguments. This can be very confusing to users who haven't
discovered the typo, as there are indeed 2 template parameters here (which can
make debugging extremely difficult if there are plenty of template parameters
in the template list)

Reply via email to