https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80916
Bug ID: 80916
Summary: Spurious "declared 'static' but never defined" warning
Product: gcc
Version: 7.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: davmac at davmac dot org
Target Milestone: ---
The following code (reduced via creduce) gives a warning, when compiled with:
g++ -std=c++11 -Os -Wall -Wno-invalid-offsetof -c dinit-warn.cc
dinit-warn.cc:20:40: warning: 'void b::i< <template-parameter-1-1>
>::dispatch(void*) [with <template-parameter-1-1> = {anonymous}::l]' declared
'static' but never defined [-Wunused-function]
template <typename> class i : j { void dispatch(void *); };
^~~~~~~~
However, the highlighted function, "dispatch", is not declared 'static' (and
indeed nothing in the code is declared static). Occurs at -Os and -O2, -O3, not
at -O1/-O0.
--- begin ---
class a;
namespace b {
template <typename> class i;
class j {
friend a;
virtual void dispatch(void *);
};
}
class a {
using d = b::j;
public:
template <typename e> using c = b::i<e>;
void f() {
d *k = nullptr;
k->dispatch(this);
}
};
namespace b {
template <typename> class i : j { void dispatch(void *); };
}
using g = a;
g h;
namespace {
class l : g::c<l> {};
}
void m() { h.f(); }
--- end ---