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

            Bug ID: 92598
           Summary: explicit specialization of template from unnamed
                    namespace using unqualified-id in enclosing namespace
           Product: gcc
           Version: 9.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: sbergman at redhat dot com
  Target Milestone: ---

At least with "gcc (GCC) 9.2.1 20190827 (Red Hat 9.2.1-1)",

> $ cat test.cc
> namespace { template<typename> class C; }
> template<> class C<void>;

> $ g++ -fsyntax-only -std=c++17 test.cc
> test.cc:2:18: error: explicit specialization of ‘template<class> class 
> {anonymous}::C’ outside its namespace must use a nested-name-specifier 
> [-fpermissive]
>     2 | template<> class C<void>;
>       |                  ^~~~~~~

That appears to violate the note added with
<http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1838> "Definition
via unqualified-id and using-declaration":

"[Note: An explicit instantiation (17.8.2 [temp.explicit]) or explicit
specialization (17.8.3 [temp.expl.spec]) of a template does not introduce a
name and thus may be declared using an unqualified-id in a member of the
enclosing namespace set, if the primary template is declared in an inline
namespace. —end note]"

Reply via email to