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

            Bug ID: 96210
           Summary: Diagnostic message for using-directive in template
                    definition should be more clear?
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Keywords: diagnostic
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: haoxintu at gmail dot com
  Target Milestone: ---

Hi, all.

Alias template is allowed since c++11 while using-directive is not. The
diagnostic message in using-directive used in template maybe not so clear in
GCC.

For example,

$cat test.cc
namespace N{ }
template <class> using namespace N;

$g++ test.cc
test.cc:2:24: error: expected identifier before 'namespace'
    2 | template <class> using namespace N;
      |                        ^~~~~~~~~
<source>:2:35: error: expected '{' before ';' token
    2 | template <class> using namespace N;
      |    

I guess users will be confused with above two error messages and may feel
hopeless to fix it according to the diagnostic information.

Clang might be better in parsing this code

$clang++ test.cc
test.cc:2:18: error: cannot template a using directive
template <class> using namespace N;
~~~~~~~~~~~~~~~~~^
1 error generated.  

I guess GCC should also recognize the using directive first and then tell users
this is not allowed in template definition. 

Please understand if anything I presented is unsuitable.

Thanks,
Haoxin

Reply via email to