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

            Bug ID: 84542
           Summary: missing -Wdeprecated-declarations on a redeclared
                    function template
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

Redeclaring an ordinary function with the deprecated attribute makes the
attribute effective on subsequent uses of the function.

However, redeclaring a function template with the same attribute has no effect
(regardless of whether the template has been defined).

$ cat a.C && gcc -S -Wall a.C
void f ();

void __attribute__ ((deprecated)) f ();

void ff ()
{
  f ();   // -Wdeprecated-declarations (good)
}

template <class T>
void g ();

template <class T>
void __attribute__ ((deprecated)) g ();

void gg ()
{
  g<void>();   // missing warning
}

template <class T>
void __attribute__ ((deprecated)) g () { }

void ggg ()
{
  g<void>();   // missing warning
}

a.C: In function ‘void ff()’:
a.C:7:6: warning: ‘void f()’ is deprecated [-Wdeprecated-declarations]
   f ();   // -Wdeprecated-declarations (good)
      ^
a.C:3:35: note: declared here
 void __attribute__ ((deprecated)) f ();
                                   ^

Reply via email to