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

            Bug ID: 84318
           Summary: attribute deprecated on function templates different
                    than class templates
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: debug
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

When a primary class template is declared deprecated, GCC will issue
-Wdeprecated-declarations for declarations of explicit specialization of the
template.  However, when a primary function template is declared deprecated,
GCC accepts declarations of its explicit specializations with no warning.  Both
kinds of declarations should be treated the same (and I'd say both should
trigger a warning).

$ cat t.C && gcc -S -Wall t.C
template <class T>
struct __attribute__ ((deprecated ("class")))
S { };

template <>
struct S<void> { };   // -Wdeprecated-declarations (good)


template <class T>
void __attribute__ ((deprecated ("function")))
foo ();

template <>
void foo<void> ();   // missing -Wdeprecated-declarations (bug)
t.C:6:8: warning: ‘template<class T> struct S’ is deprecated
[-Wdeprecated-declarations]
 struct S<void> { };
        ^
t.C:3:1: note: declared here
 S { };

Reply via email to