https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86233
--- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> --- The code was changed by r223778 to depend on -Wsystem-headers instead of -Wpedantic, and the testcase for that commit suggests the current behaviour is by design. But that testcase uses a redeclaration of a standard function: #include <stdlib.h> extern double atof (const char *); That seems substantially different to an explicit specialization of a function template, which is not just a redeclaration. Maybe we want a completely different rule for template specializations.